home *** CD-ROM | disk | FTP | other *** search
Text File | 1988-03-20 | 182.4 KB | 5,160 lines |
-
-
- MusicBox Version 2.12PD
-
- COPYRIGHT (C) 1986 John Dunn, All Rights Reserved
- Entered into the Public Domain, March 20, 1988
-
-
- Use and copying of this software and documentation, and preparation
- of derivative works based upon this software and documentation are
- permitted. Any distribution of this software or derivative works
- must comply with all applicable United States export control laws.
-
- This software is made available AS IS, and the author makes no
- warranty about the software, its performance, or its conformity to
- any specification.
-
-
- Table of Contents:
-
- Overview. . . . . . . . . . . . . . . . . . . . . . . . . 2
- Getting Started . . . . . . . . . . . . . . . . . . . . . 3
- MENU Commands . . . . . . . . . . . . . . . . . . . . . . 5
- General Information . . . . . . . . . . . . . . . . . . . 8
- Hexadecimal Numbers and Boolean Logic . . . . . . . . . . 11
- Tutorial. . . . . . . . . . . . . . . . . . . . . . . . . 14
-
- SWITCH Modules. . . . . . . . . . . . . . . . . . . . . . 20
- INDEX Modules . . . . . . . . . . . . . . . . . . . . . . 22
- MATH Modules. . . . . . . . . . . . . . . . . . . . . . . 25
- LOGIC Modules . . . . . . . . . . . . . . . . . . . . . . 27
- SEQUENCE Modules. . . . . . . . . . . . . . . . . . . . . 29
- MIX Modules . . . . . . . . . . . . . . . . . . . . . . . 32
- PROGRAM Modules . . . . . . . . . . . . . . . . . . . . . 34
-
- CLOCK Modules . . . . . . . . . . . . . . . . . . . . . . 36
- TRIGGER Modules . . . . . . . . . . . . . . . . . . . . . 41
- ONESHOT Modules . . . . . . . . . . . . . . . . . . . . . 44
- TEST Modules. . . . . . . . . . . . . . . . . . . . . . . 47
- RANDOM Modules. . . . . . . . . . . . . . . . . . . . . . 49
- PATTERN Modules . . . . . . . . . . . . . . . . . . . . . 53
- MIDI Modules. . . . . . . . . . . . . . . . . . . . . . . 57
-
- DISPLAY Modules . . . . . . . . . . . . . . . . . . . . . 62
- SLEW Modules. . . . . . . . . . . . . . . . . . . . . . . 64
- SAMPLE Modules. . . . . . . . . . . . . . . . . . . . . . 67
- BOUNDS Modules. . . . . . . . . . . . . . . . . . . . . . 69
- OCTAVE Modules. . . . . . . . . . . . . . . . . . . . . . 71
- SPECIAL Modules . . . . . . . . . . . . . . . . . . . . . 72
- SYSTEM Modules. . . . . . . . . . . . . . . . . . . . . . 75
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
-
- ======================================================================
- OVERVIEW
-
- MusicBox was designed to be a flexible, open-ended working
- environment that is particularly suited to developing original
- material. Although the software is capable of recording incoming
- MIDI data, it is not intended to be used as a MIDI recorder. MusicBox
- is compatible with conventional hardware and software sequencers, and
- works well with them. But it is conceptionally different from them
- because it is a composition tool rather than a recording and
- arranging tool.
-
- While MusicBox is unlike anything currently available on the
- MIDI marketplace, it will be instantly recognizable to anyone who has
- used a modular synthesizer. The program consists of an abbreviated
- menu, a multi-page workspace, and a "toolbox" of some 150 different
- computation functions, graphically represented as function "modules",
- complete with output and inputs.
-
- Like the big analog synthesizers, programming MusicBox is a
- matter of patching the outputs of modules to the inputs of other
- modules. Unlike the analogs, there are no patchcords to fuss with,
- patches are automatically labeled as they are made, and since the
- computer is perfectly willing to make multiple copies of the modules,
- there are always enough of them.
-
- MusicBox is process oriented as opposed to the more traditional
- score or data orientation. This means that rather than playing back
- notes that have been previously entered as a score or a MIDI
- recording, MusicBox calculates notes "on the fly". Composing with
- MusicBox is an iterative process, of first making a simple "patch"
- (grouping of modules), then expanding it, refining it, and
- integrating it with other patches.
-
- Although MusicBox is designed as a MIDI output controller, it
- can be used for non-MIDI and even non-musical applications. The
- chapter on "SPECIAL" modules describes tools that allow use of
- MusicBox as a non-specific process control program.
-
- MusicBox is not a particularly efficient approach for composing
- with a single instrument. It is intended to be used with a large
- number of MIDI instruments playing simultaneously, such as a TX816
- rack. In this context, MusicBox becomes both powerful and elegant,
- giving the composer the ability to quickly move from control of the
- overall sound of the electronic orchestra to an individual parameter
- of a single instrument.
-
- Like most musical instruments, MusicBox will allow subtle,
- interesting music only in proportion to the investment made in
- acquiring skill in its use. It is not an easy instrument to learn.
- It is not possible to learn at all without reading the manual. The
- most interesting modules are not intuitive, and many of the module
- icons are cryptic. To make matters worse, the number values are in
- hexadecimal. The good news is that once learned, MusicBox gives the
- composer a degree of control and agility in working with complex
- musical events that is simply not available with more conventional
- approaches.
-
-
-
-
-
- 2
-
-
-
- ======================================================================
- GETTING STARTED
-
-
- Hardware required:
-
- 512K IBM-PC/XT/AT
- Color monitor
- Microsoft compatible mouse
- Roland MPU-401
-
- Computer:
-
- Any PC-compatible will work. If very large compositions are
- intended, the extra speed of an AT gives added flexibility. Must
- have 512K or more system memory.
-
- Color monitor:
-
- The EGA, or similar high resolution color display is by far the
- best choice. While MusicBox will work with a CGA, many of these cards
- will produce objectionable "snow" due to the software's multiple fast
- screen updates. A color monitor is absolutely necessary because the
- module functions are all color coded.
-
- Microsoft compatible mouse:
-
- Any mouse that includes a Microsoft compatible mouse driver and
- has two or more pushbuttons should work. The Microsoft compatable
- mouse driver must be present for the program to run properly. This
- is software that will have been supplied with your mouse. If you
- use the Microsoft internal mouse card, set the jumper to location 3.
-
- Roland MPU-401:
-
- MusicBox will work fine with one MPU or compatable, but it also
- will support a second MPU, giving a total of 32 MIDI channels. The
- 2nd MPU must be jumpered properly for the 2nd MPU port. Remove MPU
- cover. Cut jumper tracing to port 1, and solder in tracing to port
- 2. Only use one MPU-PC interface card. Connect the MPU's in
- parallel to the one "D" connector at the computer card. Use a ribbon
- cable with one "D" connector for the computer at one end and two "D"
- connectors for the MPUs at the other end, separated by a few inches.
-
- Software installation:
-
- After running the install program, INSTALL.COM, you should have
- a copy of MB.EXE, which is the MusicBox program. This is normally
- the only file you need to run MusicBox.
-
- Before attempting to run MusicBox, be sure you have installed
- the Microsoft compatible driver for your mouse. If this driver is
- not present MusicBox will not run.
-
- To make the task of learning MusicBox a little less formidable,
- you should initially run MB from a directory that contains the
- tutorial screen file TUTOR.SCR. This is a overlay to the Page 0
- toolbox screen, with all but a few of the modules subdued. If
- TUTOR.SCR is not in the current directory when MB is first run, the
- normal toolbox screen will appear.
-
-
- 3
-
-
-
-
- From a directory that contains the file TUTOR.SCR, run MusicBox
- by typing "MB". Once MusicBox has signed on, you will be presented
- with a screen of 21 labeled blue boxes, and a square blue mouse
- cursor toward the center of the screen. Each box contains one or two
- white icons, and several dark grey icons. Ignore the dark grey icons
- for now. They are modules that have been inactivated by TUTOR. Thier
- icons remain onscreen to help in identifying the positions of the
- active modules.
-
- The Tutorial section of this manual contains step by step
- directions for four simple patches. Try them out, then continue to
- work with the TUTOR overlay, referring all the while to the module
- documentation in the latter part of this manual. By the time you
- have used each of the 32 modules in TUTOR, you will be ready to
- remove TUTOR.SCR from your working directory, and to tackle the full
- complement of over 150 MusicBox modules.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4
-
-
-
- ======================================================================
- MENU COMMANDS
-
- MusicBox uses two sets of menus. The working menu that is
- available on the left margin of all work pages and the file menu that
- is only on page 0.
-
- ----------------------------------------------------------------------
- Working Menu Commands
-
- 0-7 Change display page. With the EGA, all 8 pages are available,
- with the CGA, only pages 0-3 can be used. The highlighted
- number indicates the current page number, the highlighted
- arrow indicates the page that will be switched to when
- mouse button #2 is pressed. Except for page 0, the module
- source page, all display pges are equal, and modules may be
- moved from page to page, even while running, without
- restriction.
-
- ESC Escape from pending command. This command will kill any
- pending (highlighted) command. It may be used at any time.
-
- DEL Delete a module. Any module may be deleted at any time,
- even when other modules are connected to it. To use,
- select DEL, then select the module to be deleted. The
- module is actually "put to sleep", rather than deleted, so
- that other modules that are connected do not get confused
- (the last values of the deleted module will remain
- constant). The module source icon on page 0 is marked with
- "X" to indicate that this module is available to be
- "reincarnated". Upon reincarnation, all values are reset to
- zero, but connections from other modules, if any, will
- remain intact. On page 0, DEL is used to delete files.
- Select, then select a file in the Name area. The selected
- file is deleted.
-
- SET Write current workspace to the hidden temporary file. Used
- with REDO, which restores the workspace to the last SET, and
- SWAP, which swaps the workspace to the last SET or SWAP.
-
- HLT Halt modules, much as if an Alpha halt signal was given.
- (See SYSTEM chapter for info on the Alpha module.) Select
- again to continue.
-
- OFF Issue "All Notes Off" on all MIDI channels. Also puts all
- channels in Omni-off/Poly-on mode.
-
- Measure Readout: Display (in decimal) the current measure count.
- This is reset by the Hold input of Alpha module, described
- in the chapter on System modules.
-
- Elapsed Time: Display (in seconds, in decimal) the elapsed time
- since the last Alpha module Hold.
-
- Decimal Readout: When module input values are changed with the
- mouse, this readout changes to high intensity color and
- becomes a decimal readout of the module input, which is
- displayed at the module in hexadecimal.
-
-
-
-
- 5
-
-
-
- Note Value Readout: When module input values are changed with the
- mouse, this readout changes to high intensity color and
- becomes a note readout. It assumes C major scale
- ascending, with Octave 5 = Middle C, which is MIDI value 3C
- hex, 60 decimal.
-
- Mute Flags: The 16 numerals set/clear a 16 bit word that is
- accessible through the Mute Flag module, in the SPECIAL
- box. When a numeral is highlighted, its corresponding flag
- is TRUE. Although these flags can be used as general ON/OFF
- logic switches, they are optimized for controlling the MIDI
- Note Output module in the MIDI box. Used as such, when the
- numerals are highlighted the modules are "on", allowing the
- them to pass MIDI data. The colon separating each pair of
- numerals can be used to set/clear both at once. Default
- operation is as a bank of mute switches, each time one of
- the numerals is selected by the mouse, its on/off state is
- reversed. Setting the Mute/Solo input of the Alpha module
- will change the action to solo switches: each time a
- numeral is selected, that flag is turned on, and all others
- are turned off.
-
- ----------------------------------------------------------------------
- File Menu Commands
-
- QUIT Exits MusicBox without saving the workspace. Double click.
-
- EXIT Does an auto SAVE, then exits. Double click.
-
- MPAB Flags to load Module, Program, or Sequencer A or B data.
- Although the Save command only makes one file, the file is
- composed of the four sections given above. All sections
- are always saved, but you can load selectivly by selecting
- the flags. Only the sections that correspond to a
- highlighted letter will be loaded. Default is all four
- flags ON and highlighted, entire workspace is loaded.
-
- SWAP Swap current workspace with temporary file.
-
- REDO Restore the current workspace with the temporary file.
- Current workspace is lost, temporary file is unchanged.
-
- Both SWAP and REDO are used in conjunction with the SET
- command, which saves the current workspace to the (invisible)
- temporary file. Upon startup, MusicBox will do an auto SET,
- so the first REDO, prior to a SET or SWAP will clear the
- workspace. If SWAP was used, a second SWAP will restore to
- the original workspace. Both require double click.
-
- SAVE Save the entire workspace, using the current filename and
- the current directory. If a there is a name conflict, the
- old file will be renamed to PREVIOUS. The old PREVIOUS,
- if it exists, is overwritten. Requires double click.
-
- TEMP This is the current filename. It is changed by selecting
- the area with the mouse, then writing the new name with
- the console keyboard. Requires double click.
-
-
-
-
-
- 6
-
-
-
- Path area changes directory and/or disk drive. Select with the
- mouse, then use the console keyboard to type in a letter to
- change drive, a backlash and name to change directory, or
- a full pathname to change both.
-
- Name area is a directory of the MB files in the selected directory.
- Selecting any name with the mouse will load that file
- into the workspace. The grey number is the remaining disk
- space expressed in MB files. When 0, SAVE is disabled.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 7
-
-
-
- ======================================================================
- GENERAL INFORMATION
-
- Mouse Control:
-
- All commands are initiated by positioning the mouse cursor over
- the area of interest, and pressing the LEFT mouse button. The RIGHT
- mouse button is used only to swap display pages.
-
- Creating Modules:
-
- Select a module to be created by placing the mouse cursor over
- the white label on the page 0 source screen. When the left mouse
- button is pressed and released the module will appear. Pressing the
- button again causes it to disappear, to allow the modules to be
- examined without committing to create them. With the module "on",
- switch to any page other than page 0, position the module as desired,
- and press the left button. The module will be deposited, and is
- automatically activated.
-
- Moving Modules:
-
- Place the cursor over the white label of the module to be moved.
- Press and release the left button to "pick up" the module. Drag the
- module to the new position, either on the current page or on another
- page (changing pages while dragging the module is permissible), press
- and release left button to deposit.
-
- Color Conventions:
-
- Each module is represented on page 0 by its white label icon and
- the current module number. Up to 16 copies of a module may be
- created. Modules are actually representations of assembly language
- functions which take any number of input parameters, and return only
- one output value. Thus, modules have a variable number of inputs,
- but only one (or none) outputs. Various parts of the modules are
- color coded:
-
- White: Label and handle. Use the label to pick up a module, to
- move it to a new position.
-
- Grey: Module calculation priority. Sometimes the order in
- which the modules are calculated is important. For
- example, the MIDI output module should be the last module
- calculated for a given voice, or a double note may be
- heard. Priority can be swapped by selecting the gray
- priority label (it will highlight to bright white), then
- selecting the priority label of any other module.
-
- Cyan: Module output. Selecting the cyan output label will flag
- the module's output to be the next selected input.
- Selecting the output the a second time (double-clicking)
- will highlight all inputs on all work pages that are
- presently connected to that output.
-
- Blue: Module input. Input can be of two kinds, direct values
- or output from other modules. If an input is selected
- while a module output is active (the output label will be
- highlighted), the input becomes connected to the flagged
- module's output. The input will label itself with the
-
-
- 8
-
-
-
- output module's label icon, and turn green to indicate that
- input is now from that module. If input is selected when
- there is no active module output, the input will highlight
- to bright blue, and left/right mouse movement will "dial
- in" the input value. Releasing the mouse button removes
- the highlight, and "sets" the value.
-
- Yellow: Yellow is used for information labeling, and is not
- affected by the mouse.
-
- Red: Also used only for information. Red is used like a panel
- light, usually to indicate a non-zero value.
-
- Magenta: User input. Similar to blue inputs, but can only be
- changed by direct input from the mouse.
-
- Logic State Conventions:
-
- Throughout MusicBox, numerical values also can be used as logical
- values, or as ON/OFF states. The convention used is:
-
- zero = Logical FALSE = switch/flag/state OFF
- any non-zero = Logical TRUE = switch/flag/state ON
-
- Although Logical TRUE is anything other than zero, most modules
- that return a logic state will return 1 for TRUE.
-
- Output Icon Conventions:
-
- The yellow icon labels to the left of the cyan output values
- are either an arrow pointing left, or an equal sign. The left arrow
- implies the output is a value, usually in the range of 0 - FF hex.
- The equal sign implies the output is a Logical State, TRUE or FALSE.
- Modules with the equal sign output icon will also have a red diamond
- preceding the white label tag. This will become highlighted if the
- value is TRUE, and will be low intensity if the value is FALSE, much
- like a LED panel light.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 9
-
-
-
- Input Icon Conventions:
-
- Many module inputs perform similar functions, which makes it
- possible to follow a standard set of conventions for input labeling.
- There are exceptions, and there are instances of similar but not
- identical input functions. These will be identified in the
- individual module documentation. As a general but not absolute rule,
- the following conventions apply:
-
- Value (right arrow): General value input. This is usually the
- "main" input that will be worked upon in some way by the
- module.
-
- Clock (heart): Clock input. The module will not calculate a new
- output until the next clock cycle. A clock cycle is
- defined as a zero value (OFF) followed by any non-zero
- value (ON). Once the ON is detected, the module will wait
- for an OFF value followed by another ON before performing
- the next output calculation.
-
- Strobe "!": Do it. Same as the Clock input, but is usually more
- of a one-time action than a repeated cycle.
-
- Hold (check): Reset/Hold input. If the input is ON, the module
- will ignore further Clock inputs. Many modules will also
- reset the output either to 0 or to the value at the ARROW
- input. The Hold input of the Alpha module is a global
- hold, with non-zero causing all other active modules with a
- Hold input to act as if they had also received the Hold.
-
- Offset "+": Offset to value. The value at this input will be
- added to the output. The addition will wrap around. That
- is, if the sum is greater than the FF hex value limit, it
- will assume an imaginary limit of 1FF hex, with only the
- two least significant digits showing. This means that the
- values 80 hex to FF hex can be seen as negative offsets.
- FF hex is equivalent to -1, FE hex to -2, and so on.
-
- Number "#": Often used as a "magic number" value.
-
- Count "c": Number of counts per cycle. Usually used to divide
- down an internal or external clock.
-
- AND "&": Logical AND. The output will be ANDed with the value
- at this input. Some modules will AND another input rather
- than the output.
-
- Scale "%": Scale the output with this value. This is a
- hexadecimal percentage, with 80% hex equal to 50% decimal.
- 40% hex is equal to 25% decimal, and C0% hex is equal to
- 75% decimal.
-
- Write protect (omega): Used in modules that write to memory.
- Zero inhibits writing, usually acting as a Hold for the
- module. Set to non-zero to enable memory writes.
-
-
-
-
-
-
-
- 10
-
-
-
- ======================================================================
- HEXADECIMAL NUMBERS AND BOOLEAN LOGIC
-
- Module numerical values are expressed in hexadecimal. Although
- this system appears foreign to the uninitiated, eventually it becomes
- far more helpful than if decimal numbers were used. This is because
- many module functions employ Boolean logic functions, which are easy
- to visualize in hexadecimal, but very difficult to visualize in
- decimal for values greater than 8. The modules employ Boolean logic
- because it works so well in the context of musical applications.
-
- It is a well known observation that some of the best computer
- programmers are musicians. One reason for this may be that the
- language of music shares many characters with the language of
- computers. The binary number system is central to silicon based
- computers. It also happens to be at the heart of music notation.
- Quarter notes are double eighth notes, half of whole notes. Octaves
- are exact doublings of pitch, and so on. The hexadecimal numbering
- system is a power-of-two system, as such it is naturally suited to
- work with the computer's binary organization. As such, it is also
- naturally suited to work with musical organization.
-
- Hexadecimal ("hex") is the same as decimal but with six more
- base digits. The hex digits are: 0 1 2 3 4 5 6 7 8 9 A B C D E F. In
- hexadecimal A is the same as decimal 10, B as 11, C as 12, D as 13, E
- as 14, and F as 15. Hex 10 is equivalent to decimal 16. The
- advantage of hexadecimal in dealing with binary numbers is that the
- hex digits 0 to F can be expressed with exactly four binary digits.
- As will be seen later, this is what makes Boolean logic easier to
- visualize in hex than in decimal.
-
- Decimal Hex Binary
-
- 0 0 0000
- 1 1 0001
- 2 2 0010
- 3 3 0011
- 4 4 0100
- 5 5 0101
- 6 6 0110
- 7 7 0111
- 8 8 1000
- 9 9 1001
- 10 A 1010
- 11 B 1011
- 12 C 1100
- 13 D 1101
- 14 E 1110
- 15 F 1111
-
-
- Boolean logic is a logical arithmetic that is very useful in
- describing logical process of almost any type, from digital circuits
- to legal documents. Boolean digits are the logical states TRUE and
- FALSE. In MusicBox, as in most computer applications, the binary
- digit ("bit") zero represents logical FALSE, and one represents
- logical TRUE. Boolean logic can be applied to a number in a bit-wise
- fashon, or it can be applied to the number as a whole. When applied
- to the whole number, zero is again logical FALSE, and any non-zero
- value is logical TRUE.
-
-
- 11
-
-
-
-
- The four principal Boolean operators are OR, AND, XOR NOT.
-
- Boolean NOT is a unary (requires only one argument) function
- that simply reverses the truth of the argument.
-
- NOT 0 NOT 1
- ----- -----
- 1 0
-
- NOT 1011 binary NOT B hex NOT 11 decimal
- --------------- --------- --------------
- 0100 binary 4 hex 4 decimal
-
-
- NOT 1011 0101 binary NOT B5 hex NOT 181 decimal
- -------------------- ---------- ---------------
- 0100 1010 binary 4A hex 74 decimal
-
- Note that the binary number 10110101 can be mapped into
- hexadecimal as 1011 0101 = B5. The NOT of 1011 0101 is 0100 1010,
- which can be directly mapped to 0100 = 4, 1010 = A, therefor 4A. No
- such direct mapping works for decimal.
-
- Boolean OR is a binary (requires two arguments) function that
- states if either of two values are TRUE, the result is TRUE.
-
- 0 1 1 0
- OR 0 OR 1 OR 0 OR 1
- ------ ------ ------ ------
- 0 1 1 1
-
- 1011 B 1011 0101 B5
- OR 0101 OR 5 OR 1000 0110 OR 86
- -------- ------ -------------- -------
- 1111 F 1011 0111 B7
-
-
- Boolean AND is a binary function that states if either of two
- values are FALSE, the result is FALSE.
-
- 0 1 1 0
- AND 0 AND 1 AND 0 AND 1
- ------ ------ ------ ------
- 0 1 0 0
-
- 1011 B 1011 0101 B5
- AND 0101 AND 5 AND 1000 0110 AND 86
- -------- ------ -------------- -------
- 0001 1 1000 0100 84
-
- Note that the AND function can be used as logical masking tape.
- The 0's in the bottom digit are the tape, forcing the result to 0,
- regardless of the truth of the top digit; while the 1's in the bottom
- digit acts as the unmasked area, passing through the top digit
- unchanged. Because of this, one of the arguments in the AND function
- (it does not matter which one) is often referred to as a mask, and
- the AND function itself is sometimes called a masking function.
-
-
-
-
- 12
-
-
-
- Boolean XOR (exclusive OR) is a binary function that states if
- the truth of the two arguments are identical, the result is FALSE; if
- the arguments are different, the result is TRUE.
-
- 0 1 1 0
- XOR 0 XOR 1 XOR 0 XOR 1
- ------ ------ ------ ------
- 0 0 1 1
-
- 1011 B 1011 0101 B5
- XOR 0101 XOR 5 XOR 1000 0110 XOR 86
- -------- ------ -------------- -------
- 1110 E 0011 0011 33
-
- Note that any argument XOR'd with itself is 0, any argument
- XOR'd with 0 passes through unchanged, and any argument XOR'd with 1
- passes through inverted.
-
- 1011 1011 1011
- XOR 1011 XOR 0000 XOR 1111
- -------- -------- --------
- 0000 1011 0100
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 13
-
-
-
- ======================================================================
- TUTORIAL
- ----------------------------------------------------------------------
- This first attempt isn't much. It just runs a random tone
- through the PC speaker.
-
- 1. Place the mouse cursor over the note icon in the first row
- and the first column (position 1,1) of the CLOCK box, which is the
- middle box on the left of the screen. Depress and release the LEFT
- mouse button. This will "pick up" the Note Clock module. A copy of
- the module will replace the blue square as the mouse cursor.
-
- 2. Press the RIGHT mouse button to go to a work page. The
- screen will appear blank except for the menu along the left side of
- the screen.
-
- 3. Move the Note Clock module with the mouse to a blank spot
- somewhere toward the left of the screen. Press the LEFT mouse button
- to deposit and activate the module.
-
- 4. Press the RIGHT mouse button to return to Page 0. Move the
- cursor to the box labeled RANDOM, toward the center of the screen.
- Pick up the Random Number Generator module, position 1,1 of RANDOM,
- and deposit it on the workpage as before.
-
- 5. Dial in an offset to the Random module of 30 hex, 48
- decimal. To do this, place the square mouse cursor over the blue
- number next to the yellow "+" input label at the bottom of the Random
- module. Press the LEFT mouse cursor and release. The cursor will
- disappear, and the blue numbers will be highlighted.
-
- 6. Now moving the mouse left or right will change the number.
- While you are setting the value, look at the menu area on the left
- of the screen. A highlighted blue set of numbers, representing the
- decimal value you are dialing in will appear about halfway down the
- menu column, and a Note/Octave readout will appear just below that.
-
- 7. Move the mouse to the right until the number at the module
- reads 30. The decimal readout on the left of the screen will read 48.
- Press the LEFT mouse button. The input number will freeze at the last
- value, and will return to its normal dark blue, and the square blue
- mouse cursor will reappear.
-
- 8. Dial in a limit to the Random module of 20 hex. The limit
- input is the up arrow just above the offset input.
-
- 9. Connect the Note Clock module output to the Random module's
- clock input. To do this, first place the cursor over the cyan
- (turquoise) output value near the top of the Note Clock. Press and
- release the LEFT mouse button. The numbers will hilight, indicating
- that the output of the Note Clock module is ready to be patched into
- the input of another module.
-
- 10. Move the cursor to the Random module. Place the
- cursor over the blue number next to the yellow heart. Press and
- release the LEFT mouse button. The input will turn green and take on
- the label of the Note Clock module (a note icon and the number 0),
- and at the same time the highlighted output of the Note Clock module
- will return to normal. The output of the Note Clock module is now
-
-
-
- 14
-
-
-
- patched into the clock input of the Random module. The Random module
- will now be producing a new output between 30 hex (the offset) and 50
- hex (offset+limit) at every tick of the Clock module.
-
- 11. Pick up the PC Speaker Output module, located in the SYSTEM
- box, row 2, column 3 (SYSTEM 2,3). Deposit it somewhere near the
- Random module.
-
- 12. Connect the Note Clock output to the PC Speaker clock
- input, as before. You should hear a steady beat of quarter notes at
- a tempo of about 120.
-
- 13. Connect the Random output to the PC Speaker value (arrow)
- input. Now you should hear random tones.
-
- 14. Try altering the note value input and the sustain input of
- the Clock module, which are labeled with a note and an "s",
- respectively. Also try changing the limit and offset inputs to the
- Random module. You can turn the thing off by dialing a number into
- the hold (check) input of the Note Clock, or by the menu HLT command.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 15
-
-
-
- ----------------------------------------------------------------------
- This next patch assumes a MIDI synthesizer connected to your
- computer and MPU. It further assumes the synthesizer is set to
- receive on MIDI channel 1. The patch will play an arpeggiated C
- Major chord, still random but slightly more controlled.
-
- 1. If the other patch is still on, get rid of it by selecting
- REDO (twice) from the Files Menu on page 0.
-
- 2. Fetch a Note Clock module (CLOCK 1,1), and Random module
- (RANDOM 1,1), as before. Also as before, connect the Note Clock
- output to the Random clock (heart) input.
-
- 3. Set the limit (up-arrow) input to the Random module to 4.
- It should now be generating random numbers between 0 and 3.
-
- 4. Fetch a Switch/Sequencer module (SWITCH 1,3). Into the
- inputs labeled "1", "2", and "3", dial the values 4, 7, and C hex.
- This gives the intervals in semitones of 0, 4, 7, and 12: a major
- triad.
-
- 5. Connect the Random output to the address "@" input of the
- Switch/Sequencer module. This effectively translates the random
- numbers 0-3 to the interval numbers 0, 4, 7, and C hex.
-
- 6. Fetch a MIDI Note Output module (MIDI 1,1). Activate it by
- setting the mute input (second blue input from top, looks something
- like "/o/") to 1. Dial 30 hex (octave C4, 1 8ve below middle C) into
- one of the transpose "t" inputs.
-
- 7. Connect the Switch/Sequencer output to the first note value
- "A" input of the MIDI module, then connect the Note Clock output to
- the first note velocity "a" input. At this point you should be
- getting a sound, but it will probably be very faint. Even if there
- is no sound yet, go on to the next step.
-
- 8. Set the sustain "s" input of the Note Clock module to 80
- hex. This gives a half on, half off cycle. Set the velocity value
- "v" input to the Note Clock module to about 40 hex. The sound should
- be ok now. If not try a few different patches on your synth.
-
- 9. If you are not getting sound from your synth at this point,
- first check that you have made the MusicBox connections according to
- the steps given here. If you are sure they are correct, check that
- your synth is functioning properly, and that it is properly connected
- to the computer through the MPU. If all else fails, try running the
- install program again. You might have forgotten to install it with
- MIDI output enabled.
-
- 10. Assuming you have sound, now make it a little more
- interesting. First, speed up the clock from quarter notes to eighth
- notes by changing the note value (note label) input of the Note Clock
- from 3 to 4.
-
-
-
-
-
-
-
-
-
- 16
-
-
-
-
- 11. Fetch the Dither Switch module (RANDOM 2,2). Connect the
- Note Clock module output to the clock (heart) input. Set the dither
- value "%" input to 40 hex, which is equivalent to 25%. Set the value
- input to 18 hex, 24 decimal. Now connect the Switch/Sequencer module
- output to the offset "+" input. You can't hear it yet, but the
- Dither module is bumping the arpeggiated triad up two octaves 25% of
- the time.
-
- 12. Connect the output of the Dither module into the "A" input
- of the MIDI Note module. This replaces the patch that was from the
- Switch/Sequencer. It probably will sound awful.
-
- 13. What is happening, is the module calculation priority is
- out of order. The MIDI Note Output module is seeing the Dither
- module output a full cycle AFTER it has already seen the Note Clock
- output. This causes it to play the note at the old pitch for the out
- of sync cycle, which gives a 64th note glitch.
-
- 14. Fix it by swapping priority with the Dither module. Select
- the priority number (the grey number between the white label icon and
- the cyan output number) of the Dither module -- it will highlight to
- bright white, then select the priority of the MIDI module. The
- priority numbers will swap, and the glitch will go away. In general,
- you will want to have the MIDI Note Output module as the last in the
- calculation chain for a particular voice.
-
- 16. Set up to mute the module from the menu. Fetch the Mute
- Flag module (SPECIAL 3,3). Connect it to the mute input ("/o/") of
- the MIDI Note Output module. The sound will stop. Set the mute mask
- "&" input of the MIDI Note module to 1, and set the mask input of the
- Mute module to FF hex. Now selecting the yellow mute switch "0" in
- the lower left of the menu will turn the voice on and off.
-
- 17. Save the patch by selecting SAVE from the page 0 File Menu.
- The file will be named TEMP, which is the default filename, and it
- will immediately show up in the file area below the File Menu.
-
- 18. If you saved the patch with the sound on, you can bring it
- up and running from DOS by running MB with the filename. From the
- DOS command line, typing "MB TEMP". MusicBox will come on, then
- load the file and play it.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 17
-
-
-
- ----------------------------------------------------------------------
- This next patch assumes you have two MIDI synthesizers, or one
- synthesizer with two voices. One voice is set to MIDI channel 1, the
- other to MIDI channel 2. It will be a variation of the previous
- patch with the 2nd voice a delayed version of the first. If you have
- a stereo setup, send one voice to the left speaker and one to the right.
-
- 1. Load the previous patch by selecting (twice) the name
- ("TEMP", unless you changed it) from the File Load area below the
- Page 0 File Menu.
-
- 2. Fetch the Echo module (SAMPLE 1,1). Connect the Note Clock
- module output to the clock input. Connect the Dither module output
- to the value (arrow) input. The output should be the same as the
- Dither module output.
-
- 3. Fetch another MIDI Note Output module (MIDI 1,1). Set the
- MIDI channel "c" input to 1 (if you have an instrument receiving on
- channel 2). Note that MIDI channels are numbered from 1 to 16,
- whereas the funny numbers we use here are from 0 to F.
-
- 4. Set one of the transpose "t" inputs to 30 hex. Set the mute
- mask "&" input to 2. Connect the Mute module output to the mute
- "/o/" input. Connect the Echo module output to the 1st note value
- "A" input. Connect the Note Clock output to the 1st note velocity
- "a" input.
-
- 5. Set the Menu Mute switches 0 and 1 to ON (highlighted).
- There should be essentially the same sound coming from both voices.
- You can switch back and forth between the voices by turning one Menu
- Mute off, then selecting the colon between the two numbers. One will
- go on while the other goes off. When you get tired of this, set both
- voices ON.
-
- 6. Set the delay ">>" input of the Echo module to 5. You
- should now be hearing an echoed pattern, most noticeable on the
- dithered octave kicks.
-
- 7. Fetch two MIDI Control Output modules (MIDI 2,1). Set the
- MIDI channel "c" input of the 2nd module to 1. Set the hold (check)
- input of both modules to 0. You probably will hear a change in
- sound, as the module sends its default parameters out.
-
- 8. Select two Step Pushbutton modules (ONESHOT 3,3). Connect
- the output of each into the corresponding program change "Pt" input
- of the MIDI Control modules. Change patches on your synth by
- stepping the switches up and down.
-
- 9. Swap priority with the MIDI Note Output modules and the
- Step Pushbutton modules, to keep the MIDI output at the end of the
- calculation chain.
-
- 10. Save the patch. First select the WHITE filename (should be
- "TEMP", unless you saved the previous patch under another name) in
- the File Menu area. The area will go blank. Type in the name of
- your choice, and press the Enter key. With the mouse, select SAVE
- (twice). The file now should appear in yellow in the Load area.
-
-
-
-
-
- 18
-
-
-
- ---------------------------------------------------------------------
- And now for something completely different. This is a simple
- little polyrhythm patch, right out of Schillinger. Again, it assumes
- you have two MIDI synthesizers, or one synthesizer with two voices,
- with one set to MIDI channel 1, the other to MIDI channel 2.
-
- 1. If the workspace is not already clear, clear it with REDO.
- Fetch the Mu Clock module (CLOCK 3,1). Set the count "c" input to 6.
-
- 2. Fetch two Beat Pattern Generator modules (TRIGGER 2,1).
- Connect the Mu Clock output to the clock inputs. Set the cycle "c"
- inputs of the first to 3, 5, 8, and C hex. Set the second to 4, 6,
- 7, and C hex.
-
- 3. Fetch the Mute Flag module (SPECIAL 3,3) and then fetch two
- MIDI Note Output modules (MIDI 1,1). Set the channel "c" input of
- the 2nd Note module to 1.
-
- 4. Connect the Mute Flag module to the mute input ("/o/") of
- the MIDI Note Output module. Set the mute mask "&" input of the MIDI
- Note modules to 1 and 2, respectively and set the mask input of the
- Mute module to FF hex.
-
- 5. Set the 1st note value "A" inputs of both MIDI modules to
- about 18 hex. Set the velocity offsets "v" to about 60 hex. Connect
- the Beat Pattern modules to the note velocity "a" inputs of the
- respective MIDI modules.
-
- 6. Turn on the sound with the menu mute flags, 0 & 1.
-
- 7. Play with it.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 19
-
-
-
- ======================================================================
- SWITCH MODULES
- ----------------------------------------------------------------------
- 16-input Switch/Sequencer SWITCH 1,1 w
-
- Purpose: Can act as an static value sequencer or an input switch,
- or both in combination.
-
- General: One of 16 inputs, selected by the Address input, is
- sent to the output. If inputs are set to values, this will
- act as a sequencer, if inputs are connected to other module
- outputs, it will act as a switch. The currently selected
- input is indicated by a highlighted red label reminiscent of
- the old modular sequencer stage lights.
-
- Output: Unchanged copy of the selected input.
-
- Address "@" input: Selects one of the 16 inputs that is to be
- copied to the output. Numbers greater than 15 are rolled over,
- so that 16 selects the first input, 17 selects the second, 33
- also selects the second, etc.
-
- Stage "0-F" inputs: Value inputs, may be connected to any source.
-
- ----------------------------------------------------------------------
- 8-input Switch/Sequencer SWITCH 1,2 x
- 4-input Switch/Sequencer SWITCH 1,3 y
- 2-input Switch/Sequencer SWITCH 1,4 z
-
- General: Identical to 16-input version, but has fewer inputs.
-
- ----------------------------------------------------------------------
- 2-input Switch SWITCH 2,1 \D6
- 2-input Switch with Offset SWITCH 2,2 \B7
-
- Purpose: Switch between two inputs.
-
- Output: An unmodified copy of the selected input.
-
- Switch "1/2" input: Non-zero switches output source from input "1"
- to input "2".
-
- Inputs "1" and "2": Any value.
-
- Input "+": Offset value to be added to output.
-
- ----------------------------------------------------------------------
- Toggle Switch SWITCH 2,3 \C2
-
- Output: An unmodified copy of the Value input, or 0. The red
- diamond in the label will highlight if the output of the module is
- non-zero.
-
- Switch "<->" input: Non-zero will cause the Value input to pass
- through to the output; zero will set the output to zero,
- regardless of the Value input.
-
- Value "-->" input: Any value.
-
-
-
-
- 20
-
-
-
- ---------------------------------------------------------------------
- Toggle Switch with AND Gate SWITCH 2,4 \D1
-
- Output: An unmodified copy of the Value input, or 0. The red
- diamond in the label will highlight if the output of the module is
- non-zero.
-
- AND "&" inputs: A Boolean AND function is performed with these two
- inputs. A result of non-zero will cause the Value input to pass
- through to the output; a zero result will set the output to zero,
- regardless of the Value input.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- 2-input Switch with AND Gate SWITCH 3,1 u
- 2-input Switch with AND Gate and Offset SWITCH 3,2 v
-
- Output: An unmodified copy of the selected input.
-
- AND "&" inputs: A Boolean AND function is performed with these two
- inputs. A result of non-zero switches output source from input
- "a" to input "b".
-
- Switch inputs "a" and "b": Any value.
-
- Input "+" (2nd module only): Offset value to be added to output.
-
- ----------------------------------------------------------------------
- Latest Change SWITCH 3,3 \0C
-
- General: Allow the latest changed input to pass through to the
- output.
-
- Output: An unmodified copy of the last input that has changed.
-
-
- Inputs "a" - "h": Any value. These inputs are identical, except
- that the computer tests for a change starting with the first "a"
- input, and as soon as a changed input is detected, that value is
- sent to the output, and no further processing is done during that
- calculation cycle. Thus, if all eight inputs changed at the same
- time, each output would be sent out over the next eight
- calculation cycles, starting with "a" and ending with "h".
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 21
-
-
-
- ======================================================================
- INDEX MODULES
-
-
- Index modules count. They differ in the sophistication in
- controlling how the counting is to be done. While obvious uses of
- these modules is to address sequencers and switches, they are also
- useful for other things, such as timing or pattern generation.
-
- ----------------------------------------------------------------------
- I-index INDEX 1,1 I
-
- Purpose: Simple increment/decrement by 1 counter.
-
- Output: Count of 0-FF hex.
-
- Clock (heart) input: Any non-zero after zero causes the current
- output value to be incremented (or decremented, if the Up/Down
- input is non-zero).
-
- Hold (check) input: Non-zero sets output to zero, count starts when
- returned to zero.
-
- Up/Down "+/-" input: Increment if zero, decrement if non-zero.
-
- ----------------------------------------------------------------------
- J-index INDEX 1,2 J
-
- Purpose: Increment by N counter.
-
- Output: Count of 0-FF hex.
-
- Clock (heart) input: Any non-zero after zero causes the Offset input
- to be added to the current output value (or subtracted from it, if
- the Up/Down input is non-zero).
-
- Hold (check) input: Non-zero sets output to zero, count starts when
- returned to zero.
-
- Offset "+" input: Added to the current output each clock cycle.
- Thus, if it is 1, the module will increment by 1; if FF hex, it
- will decrement by 1, if 2 it will increment by 2, if FE hex it
- will decrement by 2, etc.
-
- ----------------------------------------------------------------------
- K-index INDEX 2,1 K
-
- Purpose: Increment by N counter with upper limit. Advantage over J-
- index is that an upper limit can be set (I-index and J-index
- rollover at FF hex with no option to set an upper limit).
-
- Output: Count of 0 to upper limit (or upper limit to 0).
-
- Clock (heart) input: Any non-zero after zero causes the Offset input
- to be added to the current output value (or subtracted from it, if
- the Up/Down input is non-zero).
-
- Hold (check) input: Non-zero sets output to zero, count starts when
- returned to zero.
-
-
-
- 22
-
-
-
- Offset "+" input: Added/subtracted to the current output each clock
- cycle.
-
- Up/Down "+/-" input: Add Offset if zero, subtract if non-zero.
-
- Count "#" input: Sets upper limit. This number is inclusive (if set
- to 8, the count will reach 8 and not stop at 7).
-
- ----------------------------------------------------------------------
- L-index INDEX 2,2 L
-
- Purpose: Increment by N counter with both an upper and a lower limit.
-
- Output: Count of lower limit to upper limit (or upper to lower).
-
- Clock (heart) input: Any non-zero after zero causes the Offset input
- to be added to the current output value (or subtracted from it, if
- the Up/Down input is non-zero).
-
- Hold (check) input: Non-zero sets output to zero, count starts when
- returned to zero.
-
- Offset "+" input: Added/subtracted to the current output each clock
- cycle.
-
- Up/Down "+/-" input: Add Offset if zero, subtract if non-zero.
-
- MAX (up arrow) input: Sets upper limit. This number is inclusive
- (if set to 8, the count will reach 8 and not stop at 7).
-
- MIN (down arrow) input: Sets lower limit. Inclusive.
-
- ----------------------------------------------------------------------
- M-index INDEX 3,1 M
-
- Purpose: Increment by N counter, useful as a pattern (melody)
- generator, with both an upper and a lower limit, with automatic
- reset to 3/4 of the difference between the upper and lower limits
- when counting up and to 1/4 the difference when counting down.
-
- General: This modules looks like the I-index, but it is different in
- three important ways. The first is given above; the second is
- that the upper limit is actually one more than that what is set.
- This has consequences when the upper limit is set to FF hex. The
- third difference is that changing the Up/Down input will cause a
- change in value at the next clock instead of repeating the current
- count value at the next clock.
-
- Output: Count of lower limit to upper limit-1 (or upper-1 to lower).
-
- Clock (heart) input: Any non-zero after zero causes the Offset input
- to be added to the current output value (or subtracted from it, if
- the Up/Down input is non-zero).
-
- Hold (check) input: Non-zero sets output to zero, count starts when
- returned to zero.
-
- Offset "+" input: Added/subtracted to the current output each clock
- cycle.
-
-
-
- 23
-
-
-
- Up/Down "+/-" input: Add Offset if zero, subtract if non-zero.
-
- MAX (up arrow) input: Sets upper limit. This number is inclusive
- plus one (if set to 8, the count will stop at 9).
-
- MIN (down arrow) input: Sets lower limit. Inclusive.
-
- ----------------------------------------------------------------------
- N-index INDEX 3,2 N
-
- Purpose: Increment/decrement by 1 counter with an expanded range of
- 16 bits, (0 - 65535 decimal, 0 - FFFF hex), rather than the usual 8
- bit range of 0 - FF hex.
-
- Output: Count value shifted right by shift input.
-
- Clock (heart) input: Any non-zero after zero causes the current
- output value to be incremented.
-
- Hold (check) input: Non-zero sets output to zero, count starts when
- returned to zero.
-
- Address "@" input: Upon receiving a Reset strobe, the module will
- reset the low 8 bits of the output to this value.
-
- Page (paragraph-symbol) input: Upon receiving a Reset strobe, the
- module will reset the high 8 bits of the output to this value.
- Some sequencers can address up to 65K. These use the Address value
- as a starting low order address, and the Page value as a starting
- high order address. It can also be thought of as 256 runs (Page)
- of 256 bytes each (Address).
-
- Reset strobe "!" input: Resets the output to the values in the
- Address and Page inputs. This input is active even when the Hold
- input is non-zero.
-
- Shift ">>" input: Number of shifts to perform at the output. Each
- left shift is the same as a division by 2. A shift value of 8
- will return the Page count.
-
- ----------------------------------------------------------------------
- O-index INDEX 3,3 O
-
- Purpose: Simple increment counter with mask output.
-
- Output: Count of 0-FF hex, logically ANDed with Mask input.
-
- Clock (heart) input: Any non-zero after zero causes the current
- output value to be incremented.
-
- Hold (check) input: Non-zero sets output to zero, count starts when
- returned to zero.
-
- Mask "&" input: Logically ANDed with index count, prior to output.
-
-
-
-
-
-
-
-
- 24
-
-
-
- ======================================================================
- MATH MODULES
-
- ----------------------------------------------------------------------
- Add MATH 1,1 +
-
- Output: Sum of the 3 "+" inputs.
-
- Add "+" inputs: Any value. Note that overflow will wrap around,
- just as Offset inputs on other modules.
-
- ----------------------------------------------------------------------
- Add/Subtract MATH 1,2 \F1
- Add/Subtract MATH 1,3 -
-
- Note: These two modules are identical in function.
-
- Output: Sum of the 2 "+" inputs minus the "-" input.
-
- Add "+" inputs: Any value.
-
- Subtract "-" input: Any value.
-
- ----------------------------------------------------------------------
- Multiply/Divide MATH 2,1 *
-
- Output: Product of first two inputs, optionally divide by the third
- input.
-
- Multiply "*" inputs: The 16 bit product of the two Multiply inputs
- is internally stored to allow accurate division by the third
- input. Only the least significant 8 bits (0-FF hex) are displayed.
-
- Divide (divide-symbol) input: Integer division of the product of the
- first two inputs. Fractions are truncated. If the input is zero,
- no action is taken.
-
- ----------------------------------------------------------------------
- Scale MATH 2,2 %
-
- Output: Scaled input plus offset.
-
- Value "-->" input: Value to be scaled.
-
- Scale "%" input: The hexadecimal percentage of the value input that
- will be sent to the output, with 80% hex equal to 50% decimal.
- 40% hex is equal to 25% decimal, and C0% hex is equal to 75%
- decimal. Thus, 80 hex returns 1/2 of Value input, 40 hex returns
- 1/4, C0 hex returns 3/4, etc.
-
- Offset "+" input: Added to results of scaled value.
-
- ----------------------------------------------------------------------
- Modulus MATH 2,3 /
-
- Output: Remainder of Value input divided by Slash input.
-
- Value "-->" input: Dividend. Any value.
-
- Slash "/" input: Divisor. No action taken if zero.
-
-
- 25
-
-
-
-
- ----------------------------------------------------------------------
- Left Shift MATH 3,1 \AE
-
- Purpose:
-
- Output: Value input shifted, then ANDed.
-
- Value "-->" input: Value to be shifted.
-
- Shift "<<" input: Number of shifts to perform. Each left shift is
- the same as a multiplication by 2. Since all displayed values are
- 8 bit integers, values greater than 8 are meaningless, and are
- internally normalized to 0-7.
-
- Mask "&" input: Shift results are logically ANDed with this value
- before being sent to the output.
-
- ----------------------------------------------------------------------
- Right Shift MATH 3,2 \AF
-
- Output: Value input shifted, then ANDed.
-
- Value "-->" input: Value to be shifted.
-
- Shift ">>" input: Number of shifts to perform. Each left shift is
- the same as a division by 2. Since all displayed values are 8 bit
- integers, values greater than 8 are meaningless, and are
- internally normalized to 0-7.
-
- Mask "&" input: Shift results are logically ANDed with this value
- before being sent to the output.
-
- ----------------------------------------------------------------------
- Power of Two MATH 3,3 ^
-
- Output: Input to the power of two.
-
- Value "-->" input: Exponent of 2^n operation. Since all displayed
- values are 8 bit integers, values greater than 8 are meaningless,
- and are internally normalized to 0-7.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 26
-
-
-
- ======================================================================
- LOGIC MODULES
-
- ----------------------------------------------------------------------
- AND/XOR LOGIC 1,1 &
-
- Output: Logical AND of the first two inputs XORd with the third.
-
- Boolean AND "&" inputs: Any value. Since a value ANDed with FF hex
- is itself, setting one of these to FF hex effectively disables the
- AND function, leaving the module as an XOR function only.
-
- XOR "x" input: Any value. Since a value XORd with 0 is itself,
- leaving this input at 0 effectively disables the XOR function,
- leaving the module as an AND function only.
-
- ----------------------------------------------------------------------
- AND/Offset LOGIC 1,2 \91
-
- Output: Logical AND of the first two inputs, added to the third.
-
- Boolean AND "&" inputs: Any value. The two inputs are logically
- ANDed.
-
- Offset "+" input: Added to the current output.
-
- ----------------------------------------------------------------------
- OR LOGIC 1,3 |
-
- Output: Logical OR of the three Value inputs.
-
- Value "-->" input: Any value
-
- ----------------------------------------------------------------------
- Mask and Left Shift LOGIC 2,1 \A9
-
- Output: Binary left shift of results of the two AND inputs, useful
- to isolate a bit (mask), then to shift it into place.
-
- Boolean AND "&" inputs: A logical AND operation is performed on
- these two inputs, with the results going to the shift function.
-
- Shift "<<" input: Number of shifts to perform. Each left shift is
- the same as a multiplication by 2. Since all displayed values are
- 8 bit integers, values greater than 8 are meaningless, and are
- internally normalized to 0-7.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 27
-
-
-
- ---------------------------------------------------------------------
- Mask and Right Shift LOGIC 2,2 \AA
-
- Output: Binary right shift of results of the two AND inputs, useful
- to isolate a bit, then to shift it into place.
-
- Boolean AND "&" inputs: A logical AND operation is performed on
- these two inputs, with the results going to the shift function.
-
- Shift ">>" input: Number of shifts to perform. Each left shift is
- the same as a division by 2. Since all displayed values are 8 bit
- integers, values greater than 8 are meaningless, and are
- internally normalized to 0-7.
-
- ----------------------------------------------------------------------
- Identity LOGIC 2,3 #
-
- Purpose: Convenience module to display or echo an input.
-
- Output: Unmodified copy of input.
-
- Value "-->" input: Any value
-
-
-
- ----------------------------------------------------------------------
- NOT AND LOGIC 3,1 \ED
-
- Output: Logical NOT (one's complement) of the first input followed
- by a logical AND with the second input.
-
- NOT (circle with slash) input: Value to be logically inverted.
-
- AND input: Mask value.
-
- ----------------------------------------------------------------------
- Negate LOGIC 3,2 \A5
-
- Output: 2's complement (minus) of input.
-
- Value "-->" input: Any value
-
- ----------------------------------------------------------------------
- Identity with Decimal Readout LOGIC 3,3 \01
-
- Purpose: Convenience module to display or echo an input.
-
- Output: Unmodified copy of input.
-
- Display output: Decimal representation of the input.
-
- Value "-->" input: Any value
-
-
-
-
-
-
-
-
-
-
- 28
-
-
-
- ======================================================================
- SEQUENCE MODULES
-
- Sequencers read or write values to/from specific memory locations, by
- either random or sequential access. The modules are entirely
- general. They can control note values, dynamics, timing, anything at
- all. They can be run as individual sequencers, or ganged together to
- make multiple output sequencers.
-
- Usually, sequencers will be driven by one of the index modules, which
- in turn is driven by a clock module. As is true of all modules, each
- sequencer has just one output. Multiple output sequencers can easily
- be built by driving several modules with the same index module. The
- output of the module is always an unmodified copy of the memory cell
- at the given address (or address+offset), and can be any value from 0
- to FF hex. All memory cells are initialized to 0, so stepping
- through a sequencer that has not been programmed will result in a
- steady output of 0.
-
- There are 8 sequencer modules, 4 that can address a 64K memory area,
- ("A" of MPAB in the page 0 menu) and 4 which address a 4K area ("B"
- of MPAB) as one of 16 blocks of 256 bytes. The two memory areas, "A"
- and "B" are automatically saved whenever a "SAVE" command is given.
- Individual sequences can be loaded by setting and clearing
- appropriate "MPAB" flags. See the "MENU" chapter for details.
-
- Sequencer memory area "A" is also used for system exclusive loads and
- dumps; area "B" at block 15 (F hex) is used as a buffer for incoming
- MIDI data. Both memory areas may also used to display ASCII
- characters. See the "MIDI", "SYSTEM", and "DISPLAY" chapters for
- details these special usages.
-
- ----------------------------------------------------------------------
- 64K Read/Write Sequencer SEQUENCE 1,1 P
-
- Purpose: Read from or write to memory locations within the "A"
- memory block.
-
- Output: Contents of addressed memory cell.
-
- Address "@" input: Current read/write address. Since input values
- are limited to 0-FF hex (0-255 decimal), this input can address
- 256 memory locations.
-
- Page (paragraph symbol) input: Current high address. Since this
- sequencer can address up to 65K, it uses Address input as a
- low order address, and the Page input as a high order address.
- Can also be thought of as 256 runs (Page) of 256 bytes each
- (Address).
-
- Write enable (omega) input: A non-zero value allows writing into
- (programming) the sequencer. When ON, the Value input is written
- into the memory cell addressed by Address and Page, when OFF
- (zero), the memory cell can be read. Be careful with this input,
- inadvertently setting it ON will clobber existing data.
-
- Value "-->" input: Only meaningful while programming the module,
- this is the value that will be written to the currently addressed
- memory cell when the write enable input is non-zero.
-
-
-
- 29
-
-
-
- Write mask "&" input: Only meaningful while programming the module.
- Allows individual bits in a given memory cell to be written
- without affecting the other bits. Only bits set ON at this input
- are written to the addressed memory cell, with the value of the
- bits taken from the Value input. This input can be effectively
- disabled by setting it to FF hex (the default), all bits ON. When
- set to zero, the input acts as a second write protect.
-
- ----------------------------------------------------------------------
- 256-step Read/Write Sequencer SEQUENCE 1,2 p
-
- Purpose: Read from or write to memory locations within the "B"
- memory block.
-
- Magenta User Input (just left of label tag): Current 256-step run.
- There are 16 sequencer runs available. This input is used to
- manually set the desired run, 0-F hex.
-
- Note that run 15 (F hex) is used by the MIDI Data Input module as
- an input buffer. See chapter "SYSTEM" for details.
-
- Output: Contents of addressed memory cell.
-
- Address "@" input: Current read/write address. Since input values
- are limited to 0-FF hex (0-255 decimal), this input can address
- 256 memory locations.
-
- Write enable (omega) input: A non-zero value allows writing into
- (programming) the sequencer. When ON, the Value input is written
- into the memory cell addressed by Address and Page, when OFF
- (zero), the memory cell can be read. Be careful with this input,
- inadvertently setting it ON will clobber existing data.
-
- Value "-->" input: Only meaningful while programming the module,
- this is the value that will be written to the currently addressed
- memory cell when the write enable input is non-zero.
-
- Write mask "&" input: Only meaningful while programming the module.
- Allows individual bits in a given memory cell to be written
- without affecting the other bits. Only bits set ON at this input
- are written to the addressed memory cell, with the value of the
- bits taken from the Value input. This input can be effectively
- disabled by setting it to FF hex (the default), all bits ON. When
- set to zero, the input acts as a second write protect.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 30
-
-
-
- ---------------------------------------------------------------------
- 64K Read-only Sequencer SEQUENCE 2,1 Q
- 64K Read-only Sequencer SEQUENCE 2,2 R
- 64K Read-only Sequencer SEQUENCE 2,3 S
-
- Purpose: Read from memory locations within the "A" memory block.
-
- Output: Contents of addressed memory cell.
-
- Address "@" input: Current read/write address. Since input values
- are limited to 0-FF hex (0-255 decimal), this input can address
- 256 memory locations.
-
- Page (paragraph symbol) input: Current high address. Since this
- sequencer can address up to 65K, it uses Address input as a
- low order address, and the Page input as a high order address.
- Can also be thought of as 256 runs (Page) of 256 bytes each
- (Address).
-
- Read Address Offset (up-down arrow) input: Number of steps away from
- current address to read output data from. No effect when set to 0.
-
- ----------------------------------------------------------------------
- 256-step Read-only Sequencer SEQUENCE 3,1 q
- 256-step Read-only Sequencer SEQUENCE 3,2 r
- 256-step Read-only Sequencer SEQUENCE 3,3 s
-
- Purpose: Read from or write to memory locations within the "B"
- memory block.
-
- Magenta User Input (just left of label tag): Current 256-step run.
- There are 16 sequencer runs available. This input is used to
- manually set the desired run, 0-F hex.
-
- Output: Contents of addressed memory cell.
-
- Address "@" input: Current read/write address. Since input values
- are limited to 0-FF hex (0-255 decimal), this input can address
- 256 memory locations.
-
- Read Address Offset (up-down arrow) input: Number of steps away from
- current address to read output data from. No effect when set to 0.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 31
-
-
-
- ======================================================================
- MIX MODULES
- ----------------------------------------------------------------------
- Adder Switch (high nybble control) MIX 1,1 a
- Adder Switch (high nybble control) MIX 2,1 c
-
- Purpose: Switch and/or add offsets. Optimized to be used with the
- Program module output.
-
- Output: Sum of all highlighted "+" inputs.
-
- Value "+" inputs: When highlighted, the value at these inputs are
- added and sent to the output.
-
- Switch input: Selects which of the four "+" inputs will be active.
- The most significant 4 bits (high nybble: 10, 20, 30, 40 hex) at
- this input control which value inputs will be summed and sent to
- the output. For example, 10 hex turns the first input on (the "+"
- will highlight, and the value will be sent to the output), 20 hex
- turns the 2nd input on, and 30 hex turns on both the 1st and the
- 2nd inputs, causing the sum of the two to be sent to the output.
-
- ----------------------------------------------------------------------
- Adder Switch (low nybble control) MIX 1,2 b
- Adder Switch (low nybble control) MIX 2,2 d
-
- Purpose: Switch and/or add offsets. Optimized to be used with the
- Program module output.
-
- Output: Sum of all highlighted "+" inputs.
-
- Value "+" inputs: When highlighted, the value at these inputs are
- added and sent to the output.
-
- Switch input: Selects which of the four "+" inputs will be active.
- The least significant 4 bits (low nybble: 1, 2, 3, 4) at this input
- control which value inputs will be summed and sent to the output.
- For example, 1 turns the first input on (the "+" will highlight,
- and the value will be sent to the output), 2 turns the 2nd input
- on, and 3 turns on both the 1st and the 2nd inputs, causing the sum
- of the two to be sent to the output.
-
- ----------------------------------------------------------------------
- Adder Switch (shift nybble control) MIX 3,1 e
- Adder Switch (shift nybble control) MIX 3,2 f
-
- Purpose: Switch and/or add offsets.
-
- Output: Sum of all highlighted "+" inputs.
-
- Value "+" inputs: When highlighted, the value at these inputs are
- added and sent to the output.
-
- Switch input: Selects which of the four "+" inputs will be active.
-
- Shift ">>" input: Shift switch input right. Setting this to 4 shifts
- the high 4 bits of the switch input to the low position. Used to
- allow a single 8 bit value to control two Adder Switches.
-
-
-
-
- 32
-
-
-
- ---------------------------------------------------------------------
- Adder Switch (8-input) MIX 3,3 \F0
-
- Purpose: Switch and/or add offsets.
-
- Output: Sum of all highlighted "+" inputs.
-
- Value "+" inputs: When highlighted, the value at these inputs are
- added and sent to the output.
-
- Switch input: Selects which of the eight "+' inputs will be active.
-
- ----------------------------------------------------------------------
- Sum MIX 1,3 \E4
-
- Output: Sum of the 5 Value inputs, scaled and offset by the
- respective inputs.
-
- Value "-->" inputs: Any value. These inputs are added as 16 bit
- integers to avoid overflow.
-
-
- Scale "%" input: Scale the 16 bit sum of the Value inputs with this
- value. This is a hexadecimal percentage, with 80% (hex) equal to
- 50% (decimal). 40% (hex) is equal to 25% (decimal), and C0% (hex)
- is equal to 75% (decimal).
-
- Offset "+" input: Added to the current output.
-
- ----------------------------------------------------------------------
- Mixer MIX 2,3 \EE
-
- Output: Sum of the 3 Value inputs, each scaled by their respective
- Scale input, and finally summed with the Offset input.
-
- Value "-->" inputs: Any value. The difference between the Mixer
- module and the Sum module, described above, is that the Mixer
- scales each input prior to adding it to the total, while the Sum
- module adds all five inputs, then scales the final result.
-
- Scale "%" inputs: Scale the individual Value inputs with this value
- prior to adding them to the other scaled Value inputs.
-
- Offset "+" input: Added to the current output.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 33
-
-
-
- ======================================================================
- PROGRAM MODULES
-
- This group of modules consists of one Program Sequencer module plus
- 11 Stage Output modules.
-
- The Program Sequencer is the main sequencer for most musical
- applications. It is a 256 step sequencer, with stages for 12
- simultaneous values. Four of the stages can be faded from one value
- to the next, allowing smooth transitions between steps.
-
- Although set up as separate modules to get around the "one output per
- module" rule, the 11 Stage Output modules are really a continuation
- of the Program Sequencer. The modules have only an output, no input.
- The output value corresponds to the Program Sequencer stage with the
- same letter name.
-
- ----------------------------------------------------------------------
- Program Sequencer PROGRAM 1,1 \EA
-
- General: The Program Sequencer works in close concert with the Alpha
- module. In particular, it is switched between programming mode and
- playing mode by the write protect (omega icon) input of the Alpha.
- When Alpha write-protect is non-zero, the Program module is in
- playing mode, otherwise it is in programming mode. Also, the
- address "@" input of the Alpha module is the global address value
- for all active Program Sequencer modules. Information on the
- Alpha module is in the "SYSTEM" chapter.
-
- Note that all inputs are magenta "user inputs" not the normal blue
- inputs. This "user input only" setup is the result of the
- module's action as a programming module, rather than as a
- processing module.
-
- Buffers: The module uses 4 different 12 byte data buffers.
- 1. the output buffer, always displayed.
- 2. the sequencer.
- 3. the Undo buffer.
- 4. the Save buffer.
-
- While playing, each time the sequencer steps, the stored values in
- all the stages are transferred to the output buffer. The Undo
- buffer and the Save buffer are ignored.
-
- While programming, the output buffer contents can be copied into
- the Save buffer with the SAVE command, and the Save buffer
- contents can be transferred to the output buffer with RECALL.
-
- The Undo buffer is automatically filled, again only while
- programming. Each time the sequencer step address is changed, the
- current output buffer contents are first stored into the Undo
- buffer, then the stored sequencer values are transferred to the
- output buffer. Selecting the STORE command will transfer the
- sequencer data to the Undo buffer (Undo contents are lost), then
- the output buffer is copied into the sequencer locations. When an
- individual value is changed, that value in the current output
- buffer is first copied into the Undo buffer. Selecting the UNDO
- command will always exchange the output buffer with the Undo
- buffer. Thus, it possible to undo Undo.
-
-
-
- 34
-
-
-
- Output: Current sequencer address (step) for the module.
-
- Address "@": The current sequencer address. While playing, this
- value is stepped according to the value in the Measures input.
- When Measures reaches 0, the next address is set, and new
- sequencer values are brought in. While programming, "@" serves as
- a quick address locater. This input is overridden by the Alpha
- module's Programmer Address input.
-
- Address End "e": When playing, upon reaching this address, the
- sequencer will halt. Ignored if it is equal to or less than the
- current address (leaving it at 0 disables).
-
- Undo "U": Exchanges contents of the output buffer with the Undo
- buffer. Inhibited while playing.
-
- Store "!!": Store contents of output buffer into the sequencer, with
- sequencer contents saved in the Undo buffer. Inhibited when
- playing.
-
- Recall "R": Transfer contents of Save buffer into the output buffer,
- with output buffer contents saved in the Undo buffer. Inhibited
- when playing.
-
- Save "S": Transfer contents of the output buffer into the Save
- buffer. Inhibited when playing.
-
- Measures to next stage "|": This value is essentially the time
- control value. While playing, it decrements after each measure
- until it reaches 0, then it bumps the sequencer address, which
- starts off the next event. The actual time value of a measure is
- based on the Tempo and time signature values of the Alpha module.
-
- Stage outputs "X, Y, Z" and "A, B, C, D": General output stages.
- Output goes to the corresponding Stage Output module.
-
- Stage outputs with slew "E/e" to "H/h": These outputs are slewed.
- They all have a lower case slew rate label directly under the
- uppercase value label. Slewing works by adding (or subtracting,
- depending on direction) a slew value to (from) the current value
- until it reaches the new value. The higher the slew rate value,
- the faster the slew, except that a slew rate of 0 means no slew.
- Output goes to the corresponding Stage Output module.
-
- ----------------------------------------------------------------------
- Stage Output Modules PROGRAM 1,2 to 3,4 X,Y,Z, A-H
-
- Magenta User Input (just left of label tag): Must be set to
- corresponding Program Sequencer module number. This is the number
- (0-F hex) that is part of the Program Sequencer module's label.
- Select with mouse, move cursor left or right to set.
-
- Output: Value of current stage of corresponding Program Sequencer
- module and stage.
-
-
-
-
-
-
-
-
- 35
-
-
-
- ======================================================================
- CLOCK MODULES
-
-
- These modules generate timing pulses which in turn are used to
- trigger events throughout the rest of the modules. Most of the time
- the output from the Clock modules will be sent to the "heart" input
- of function modules such as the Index modules. It is important to
- realize that MusicBox operates on the MIDI 24 beat/quarter note
- standard. This means that the computer will recalculate all active
- modules exactly 24 times for each quarter note, 12 times for each
- eighth note, etc.
-
- Since strobe -- or any other change of state -- requires 2
- cycles to be detected: one cycle for the "on" state and one cycle for
- the "off" state, it is easy to confuse the 24 clocks per quarter note
- standard with 12 on/off states per quarter note. This is especially
- confusing when using clocks at their fastest rate, which would have
- to be 12 strobe cycles per quarter note. Since most of the clocks
- will generate a strobe of only 1 cycle duration, the problem
- goes away when dealing with cycles of 3 and more. As an aside, 3
- clock cycles corresponds to a thirty-second note, which is the
- fastest practical note duration. Of course the number of clocks in a
- given note (3 for a 32nd, 6 for a 8th, etc.) have nothing whatsoever
- to do with the actual time duration of the note. Tempo is set by the
- Alpha module and can range from as low as 6 quarter note beats per
- minute to as high as 256 beats per minute.
-
- ----------------------------------------------------------------------
- Note Clock CLOCK 1,1 \0D
- Note Clock CLOCK 1,2 \0E
-
- Purpose: Main note-generating clocks. The two modules are
- identical. Two are given to allow up to 32 copies of the module,
- rather than the usual 16.
-
- Output: Clock between a copy of the "v" (value) input, or 0.
-
- Hold (check) input: When non-zero, output will hold at 0. When
- released, the output will synchronize to the next non-zero Sync
- input. Note that a Hold at the Alpha system module will act
- exactly like a hold at this input (as well as at the Hold input of
- all other modules), allowing all clocks to be held and sync'd with
- just the one Alpha Hold.
-
- Sync "S" input: After a HLT, or a local or Alpha module Hold, the
- clock will not resume until a non-zero value is detected at this
- input. Thus, clocks can be synced to other clocks, or to any
- other event. By leaving the sync at non-zero (the default), an
- Alpha hold will cause all active clocks to sync to the system
- measure start.
-
-
-
-
-
-
-
-
-
-
-
- 36
-
-
-
- Note value (note) input: Sets clock rate as a note duration time.
- Add 10 hex to flag triplets, 20 hex to flag dotted notes.
-
- Example: 3 = quarter note,
- 13 hex = quarter note triplet,
- 23 hex = dotted quarter note.
-
- input note clocks clocks clocks
- value value normal triplet dotted
-
- 0 = Double whole 192 128 255 *
- 1 = Whole note 96 64 144
- 2 = Half note 48 32 72
- 3 = Quarter note 24 16 36
- 4 = Eighth note 12 8 18
- 5 = Sixteenth 6 4 9
- 6 = Thirty second 3 2 4 *
- 7 = Sixty fourth 2 * 2 * 2 *
-
- * = not accurate representations.
-
- Sustain value "s" input: Note on time as a hexadecimal percentage of
- total note duration, with 80% hex equal to 50% decimal. 40% hex is
- equal to 25% decimal, and C0% hex is equal to 75% decimal. A
- value of 0 will give a note on time of 1 clock.
-
- Delay Offset "o" input: Offset value of note start, in clocks.
- Although the Offset value is always a delay, it is possible to
- lead the note by giving offset values greater than half the note
- value. Note that every time the offset value changes, the module
- is automatically re-sync'd to the sync pulse plus the delay.
-
- Velocity Value "v" input: This value is sent to the module output at
- clock-on, at clock-off, the module output is set to zero. The
- purpose of this input is to allow for the clock pulse to directly
- control the MIDI velocity input of the MIDI output module. When
- the note clock output is used as a general ON/OFF flag, the value
- can be left at its default value of 1. If this value is set to
- zero, it has the effect of holding the module off without
- resetting the sync.
-
- ----------------------------------------------------------------------
- Measure Clock CLOCK 2,1 \B3
-
- Purpose: To clock measure starts, with time offset into the measure.
-
- Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
- one calculation cycle (1/24 of a quater note).
-
-
- Hold (check) input: When non-zero, output will hold at 0. When
- released, the output will synchronize to the next measure start,
- plus the given offset. Note that a Hold at the Alpha system
- module will act exactly like a hold at this input.
-
- Delay Offset "o" input: Offset value from measure start, in clocks.
- Although the offset value is always a delay, it is possible to
- lead the measure by giving offset values greater than half the
- measure value.
-
-
-
- 37
-
-
-
- ----------------------------------------------------------------------
- Multiple Measure Clock CLOCK 2,2 \BA
-
- Purpose: Measures clock. A good clock to trigger slow events.
-
- Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
- one calculation cycle (1/24 of a quater note).
-
- Hold (check) input: When non-zero, output will hold at 0.
-
- Measure Count "c" input: Number of measures between strobes. When
- set to 1, a strobe is generated at the start of each measure
- (measure timing & beats per measure are set by the Alpha module).
- When set to 2, a strobe is generated every 2nd measure; when set
- to FF hex, a strobe is generated at the start of every 255th
- measure, etc. When set to 0, no strobe is generated.
-
- ----------------------------------------------------------------------
- Seconds Clock CLOCK 2,3 \92
-
- Purpose: Real-time clock. Runs at an unchanging rate of one count
- per second.
-
- Output: Seconds or minutes count, depending on "m" input.
-
- Display (yellow) output: Decimal display of Output.
-
- Hold (check) input: When set to non-zero, output will hold, when
- returned to zero, output goes to 0.
-
- Minutes flag "m" input: Set output as follows:
-
- 0 = direct send of seconds count, 0 - FF hex.
- 1 = direct send of seconds count, 0 - 60 decimal.
- 2 = direct send of minutes (seconds / 60).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 38
-
-
-
- ----------------------------------------------------------------------
- Mu Clock CLOCK 3,1 \E6
-
- Purpose: General purpose event clock, similar in operation to an
- analog LFO. Changing values in the Count input will give
- accelrando or ritardando.
-
- Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly one
- calculation cycle (1/24 of a quater note).
-
- Hold (check) input: When non-zero, output will hold. When returned
- to zero, the beat cycle will start at that moment, allowing the
- Hold input to also act as a sync input.
-
- Count "c" input: Number of clocks between strobes, with 1 the shortest
- duration, 255 the longest. When 0, the clock is stopped.
-
- ---------------------------------------------------------------------
- Gamma Clock CLOCK 3,2 \E7
-
- Purpose: General purpose event clock. A good clock to trigger fast
- events. Also useful for generating leading or lagging beats.
-
- Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
- one calculation cycle (1/24 of a quater note).
-
- Hold (check) input: When non-zero, output will hold at 0. When
- returned to zero, the beat cycle will start at that moment, allowing
- the Hold input to also act as a sync input.
-
- Count "c" input: Number of clocks between strobes, with 1 the
- shortest duration, 255 the longest. When 0, the clock is stopped,
- when 1 it strobes every calculation cycle, with a complete on/off
- clock cycle occurring every two calculation cycles. Since the
- on/off strobe cycle is only meaningful with a minimum of 2 beats,
- there is no pratical difference between a setting of 1 and of 2,
- and in fact it acts as if the minimum active setting was 2.
-
- Offset "o" input: While the beat cycle is controlled by the Count
- input, above, the offset into the beat where the strobe will occur
- is set by this input. When the Offset value is 0, the strobe will
- occur at the start of the beat; when 1, then it happens one clock
- after the start of the beat, and so on. If the Offset input is set
- to a value equal to or greater than the Count input, the strobe
- occurs at the start of the beat, just as if it were set to 0.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 39
-
-
-
- ----------------------------------------------------------------------
- Lambda Clock CLOCK 3,3 \E2
-
- Purpose: General clock/loop counter. Simply counts calculation
- cycles (also called "loops", because the program loops back to the
- start after each cycle). For each loop, the output of the clock
- is incremented by one. When the count reaches FF hex (255
- decimal), it rolls over to 0.
-
- Output: Count of 0-FF (hex), masked by the AND input.
-
- Hold (check) input: When non-zero, output will hold at 0.
-
- Shift ">>" input: Reduce the count period by powers of 2. A value
- of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
- Since the internal count register is 16 bits while only 8 bits can
- be displayed, shifting can also be used to count beyond the normal
- 255 maximum (16 bits gives a maximum of 65,535).
-
- Mask "&" input: Bit mask for output. The value of the input is
- logically ANDed with the loop count prior to sending it to the
- output. Thus, with the input set to 0, the output will remain 0,
- if the input is set to FF (hex), the output will count from 0 to
- FF, and repeat continuously. Useful input values are powers of 2
- (1, 2, 4, 8, 10 hex, 20 hex, 40 hex, 80 hex), which will give
- clock ticks which half in frequency for each power of two.
-
- Note that one loop cycle is the same as one MIDI clock, but since
- the AND input wants to do things in powers of 2, and since the
- MIDI clock standard is 24 beats per quarter note (which works out
- to be powers of three), this module is usually not the best choice
- to directly generate note timing.
-
- ----------------------------------------------------------------------
- Beta Clock CLOCK 3,4 \E1
-
- Purpose: Real-time clock/loop counter, independent of the system
- Tempo setting of the Alpha module. Runs at an unchanging rate
- some 580 counts/second. For each clock tick, the output of the
- module is incremented by one. When the output reaches FF hex (255
- decimal), it rolls over to 0.
-
- Output: Count of 0-FF (hex), masked by the AND input.
-
- Hold (check) input: When non-zero, output will hold at 0.
-
- Shift ">>" input: Reduce the count period by powers of 2. A value
- of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
- Since the internal count register is 16 bits while only 8 bits can
- be displayed, shifting can also be used to count beyond the normal
- 255 maximum (16 bits gives a maximum of 65,535).
-
- Mask "&" input: Bit mask for output. The value of the input is
- logically ANDed with the tick count prior to sending it to the
- output. Thus, with the input set to 0, the output will remain 0,
- if the input is set to FF (hex), the output will count from 0 to
- FF, and repeat continuously.
-
-
-
-
-
- 40
-
-
-
- ======================================================================
- TRIGGER MODULES
- ----------------------------------------------------------------------
- Synchronizer TRIGGER 1,1 \EF
-
- Purpose: Synchronize one clock event with another, or a random event
- with a clock cycle, or two random events with each other.
-
- Output: Pulse (0 to 1 to 0) synchronized in time according the two
- inputs.
-
- Trigger "t" input: A strobe at this input will cause an output pulse
- to be generated at the next Sync input.
-
- Sync "s" input: Once a Trigger input is received, a strobe at this
- input will be produce a pulse at the output. Normal usage is to
- patch a clock at this input, and a random pulse at the Trigger
- input. This will sync the random pulse to the clock. Can also be
- used as a one-shot pulse generator by "loading" with the Trigger
- input, and "shooting" with the Sync input.
-
- ----------------------------------------------------------------------
- Flip-Flop TRIGGER 1,2 \E9
-
- Output: TRUE (1) or FALSE (0), depending on the last "s" or "r"
- input.
-
- Set "s" input: Non-zero after zero will set the output to TRUE.
-
- Reset "r" input: Non-zero after zero will set the output to FALSE.
-
- ----------------------------------------------------------------------
- Beat Pattern Generator TRIGGER 2,1 \9B
-
- Purpose: Generate a beat pattern by the interference of up to four
- beat frequencies.
-
- Output: Pulses (0 to 1 to 0) grouped in time according to Cycle
- inputs.
-
- Clock (heart) input: Master clock for the module. Output will be
- derived from and synchronized to this input.
-
- Hold (check) input: When non-zero, output will hold at 0. When
- released, the output will synchronize (all counts will start at
- the same time).
-
- Cycle "c" inputs: The number of clock cycles to run before sending a
- pulse to the output. Each of the four inputs are independent of
- the others, and are identical in function. When an input value is
- 0, that input is effectively disabled. Note that whenever any
- Cycle input value is changed, all four cycle counts will be reset,
- causing the module to automatically resync. Normally this is
- desirable because it gives a stable, known pattern for each
- setting. When strange offsets to the beat pattern are desired,
- use the Beat Pattern Modulator, described below.
-
-
-
-
-
-
- 41
-
-
-
- ----------------------------------------------------------------------
- Beat Pattern Modulator TRIGGER 2,2 \03
-
- Purpose: Generate a beat pattern by the interference of up to four
- independent clock inputs.
-
- Output: Pulses (0 to 1 to 0) grouped in time according to Cycle
- inputs.
-
- Hold (check) input: When non-zero, output will hold at 0.
-
- Clock (heart) inputs: Clock pulses at these inputs will be combined
- into a single pulse at any one calculation cycle, and sent out as
- an output strobe. Each of the four inputs are independent of the
- others, and are identical in function. Unused inputs are ignored.
-
- ----------------------------------------------------------------------
- Random Strobe TRIGGER 2,3 \C1
-
- Purpose: General purpose event trigger, with random dither.
-
- General: This is the same as the Gamma Clock module, except it has a
- dithered strobe output. Handy for generating polyrhythms.
-
- Output: Strobe from 0 to 1 to 0, with the on-time lasting exactly
- one calculation cycle (1/24 of a quater note), with frequency set
- by the Count input, and probability set by the Dither input.
-
- Hold (check) input: When non-zero, output will hold at 0. When
- returned to zero, the beat cycle will start at that moment,
- allowing the Hold input to also act as a sync input.
-
- Count "c" input: Number of clocks between strobes, with 1 the
- shortest duration, 255 the longest. When 0, the clock is stopped,
- when 1 it strobes every calculation cycle, with a complete on/off
- clock cycle occurring every two calculation cycles. Since the
- on/off strobe cycle is only meaningful with a minimum of 2 beats,
- there is no pratical difference between a setting of 1 and of 2,
- and in fact it acts as if the minimum active setting was 2.
-
- Offset "o" input: While the beat cycle is controlled by the Count
- input, above, the offset into the beat where the strobe will occur
- is set by this input. When the Offset value is 0, the strobe will
- occur at the start of the beat; when 1, then it happens one clock
- after the start of the beat, and so on. If the Offset input is set
- to a value equal to or greater than the Count input, the strobe
- occurs at the start of the beat, just as if it were set to 0.
-
- Dither "%" input: The value at this input is compared to an
- internally generated random number in the range of 0-FF (hex).
- The effect of this is the higher the Dither value, the more often
- the output strobe will occur. If the value is 0, the strobe will
- be disabled; if 40 (hex), it will occur 1/4 of the time; if 80
- (hex), it will occur 1/2 of the time; if C0 (hex), it will occur
- 3/4 of the time; if FF (hex) it will occur 255/256 of the time.
-
-
-
-
-
-
-
- 42
-
-
-
- ----------------------------------------------------------------------
- Change Detector TRIGGER 3,1 \0B
-
- Output: TRUE pulse if the Value input has changed. Pulse is active
- for one complete module calculation cycle, then returns to zero.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Slope Detector TRIGGER 3,2 \5C
-
- Output: True (1) when the current value is greater than the
- preceding value (positive slope), False (0) when the current value
- is less than the preceding value (negative slope). No change when
- the preceding value equals the current input.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Delta Test TRIGGER 3,3 \A6
-
- Output: TRUE (1) when the absolute difference between the current
- Value input and the last different Value input is equal to the
- Delta value input.
-
- Hold (check) input: When non-zero, output will hold at 0.
-
- Delta value (delta) input: Value that will be compared with the
- input delta.
-
- Octave normalize "o" input: When non-zero, the input will be
- normalized to one octave (0-11), before it is compared with the
- Delta value.
-
- Input "-->": Any changing value.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 43
-
-
-
- ======================================================================
- ONESHOT MODULES
- ----------------------------------------------------------------------
- Timer ONESHOT 1,1 \D9
-
- Purpose: Signal an event after a given number of MIDI clocks, with
- optional delay. Based on internal MIDI clock speed, which is
- dependent on the Tempo setting of the Alpha module.
-
- Output: After an optional delay, goes from 0 to 1, then returns to 0
- again.
-
- Strobe "!" input: A zero to non-zero transition starts the timer.
- Further inputs are ignored until the module completes its cycle.
-
- Delay "d" input: Number of clocks delay, after the Strobe input is
- clocked, before output goes to 1. When 0, there is no delay.
-
- Hold "h" input: Number of clocks the pulse will remain on. When 0,
- the output will not return to zero. This is useful when used with
- the "d" input to control an event start that will never retrigger.
-
- ----------------------------------------------------------------------
- Clocked Timer ONESHOT 1,2 \BE
-
- Purpose: Signal an event after a given number of clock ticks, with
- optional delay. Based on an external clock speed.
-
- Output: After an optional delay, goes from 0 to 1, then returns to 0
- again.
-
- Clock (heart) input: Any non-zero after zero will increment the
- internal counters.
-
- Strobe "!" input: A zero to non-zero transition starts the timer.
- Further inputs are ignored until the module completes its cycle.
-
- Delay "d" input: Number of clocks delay, after the Strobe input is
- clocked before output goes to 1. When 0, there is no delay.
-
- Hold "h" input: Number of clocks the pulse will remain on. When 0,
- the output will not return to zero. This is useful when used with
- the "d" input to control an event start that will never retrigger.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 44
-
-
-
- ----------------------------------------------------------------------
- Absolute Timer ONESHOT 2,1 \BC
-
- Purpose: Signal an event after a given time setting, with optional
- delay. One-shot timer based on the internal 580 ticks/second
- real-time clock speed, which is independent of the Tempo setting
- of the Alpha module.
-
- Output: After an optional delay, goes from 0 to 1, then returns to 0
- again.
-
- Strobe "!" input: A zero to non-zero transition starts the timer.
- Further inputs are ignored until the module completes its cycle.
-
- Delay "d" input: Number of clocks delay, after the Strobe input is
- clocked, before output goes to 1. When 0, there is no delay.
-
- Hold "h" input: Number of clocks the pulse will remain on. When 0,
- the output will not return to zero. This is useful when used with
- the "d" input to control an event start that will never retrigger.
-
- Shift ">>" input: Reduce the count period by powers of 2. A value
- of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
-
- ----------------------------------------------------------------------
- Seconds Timer ONESHOT 2,2 \BD
-
- Purpose: Signal an event after a given time setting, with optional
- delay. One-shot timer based on the internal 1/second real-time
- clock speed, which is independent of the Tempo setting of the
- Alpha module.
-
- Output: After an optional delay, goes from 0 to 1, then returns to 0
- again.
-
- Strobe "!" input: A zero to non-zero transition starts the timer.
- Further inputs are ignored until the module completes its cycle.
-
- Delay "d" input: Number of clocks delay, after the Strobe input is
- clocked, before output goes to 1. When 0, there is no delay.
-
- Hold "h" input: Number of clocks the pulse will remain on. When 0,
- the output will not return to zero. This is useful when used with
- the "d" input to control an event start that will never retrigger.
-
- Shift ">>" input: Reduce the count period by powers of 2. A value
- of 1 will reduce the period by 1/2, 2 by 1/4, 3 by 1/8, etc.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 45
-
-
-
- ----------------------------------------------------------------------
- Strobe Pushbutton ONESHOT 3,1 \09
-
- Output: ON pulse, returning to OFF.
-
- Magenta User Input: Clicking the left mouse button when the cursor
- is over magenta user input pad will change the output from 0 to 1
- for 1 calculation cycle, then return to 0.
-
- ----------------------------------------------------------------------
- Gate Pushbutton ONESHOT 3,2 \E3
-
- Output: 0/1
-
- Magenta User Input: Clicking the left mouse button when the cursor
- is over magenta user input pad will change the output from 0 to 1
- (or from 1 to 0).
-
- ----------------------------------------------------------------------
- Step Pushbutton ONESHOT 3,3 \12
-
- Output: 0-FF (hex)
-
- Magenta User "#" Input: This value is echoed to the output.
-
- Magenta User (up & down arrows) Input: Clicking the left mouse
- button when the cursor is over the left side of the magenta input
- pad will increment the value at the output, the right side of the
- pad will decrement the output.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 46
-
-
-
- ======================================================================
- TEST MODULES
-
- This group of modules will test for a particular condition, and
- report TRUE (output=1, red tag indicator highlighted) if the
- condition is met, and FALSE (output=0, red tag indicator not
- highlighted), if the condition is not met.
-
- ----------------------------------------------------------------------
- Zero? TEST 1,1 \07
-
- Output: TRUE if the Value input is zero, else FALSE.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Equal? TEST 1,2 =
-
- Output: TRUE if the two Value inputs are equal, else FALSE.
-
- Value "-->" inputs: Any value.
-
- ----------------------------------------------------------------------
- Different? TEST 1,3 \A7
-
- Output: TRUE if the two Value inputs are not equal, else FALSE.
-
- Value "-->" inputs: Any value.
-
- ----------------------------------------------------------------------
- Greater? TEST 2,1 >
-
- Output: TRUE if value input "a" is greater than value input "b",
- else FALSE.
-
- Value inputs "a" and "b": Any value.
-
- ----------------------------------------------------------------------
- Less? TEST 2,2 <
-
- Output: TRUE if value input "a" is less than value input "b", else
- FALSE.
-
- Value inputs "a" and "b": Any value.
-
- ----------------------------------------------------------------------
- Within? TEST 2,3 \CA
-
- Output: TRUE if Value input is within limits set by MAX input and
- MIN input, else FALSE.
-
- Value "-->" input: Any value.
-
- MAX (up arrow) input: Upper limit of test condition, inclusive.
-
- MIN (down arrow) input: Lower limit of test condition, inclusive.
-
-
-
-
-
-
- 47
-
-
-
- ----------------------------------------------------------------------
- True? TEST 3,1 "
-
- Output: TRUE if the Value input is non-zero, else FALSE.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Negative? TEST 3,2 \A4
-
- Output: True if the input value is greater than 7F hex, 127 decimal.
- Since all displayed values are in the range of 0-FF hex, values
- greater than 7F hex can be treated as negative numbers. FF hex is
- equivalent to -1, FE hex to -2, and so on. The module also is
- useful for warning when an output value is beyond the legal MIDI
- range of 0-7F hex.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Bit Set TEST 3,3 \FE
-
- Purpose: Convert a zero/non-zero value to one of 8 individual bit
- positions in the output.
-
- Output: 8-bit value representing the ON/OFF state of the 8 Logic
- inputs.
-
- Logic "0" to "7" inputs: From top to bottom, the zero/non-zero state
- of these inputs are translated to ON/OFF bits positioned from
- right to left in the 8 bit Output value.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 48
-
-
-
- ======================================================================
- RANDOM MODULES
- ----------------------------------------------------------------------
- Random Number Generator RANDOM 1,1 ?
-
- Output: A random number within set limits. Uses a simple, fast
- algorithm to produce a uniformly distributed pseudo random value.
-
- Clock (heart) input: Non-zero after zero will cause a new random
- number to be generated.
-
- Hold (check) input: Non-zero resets the seed to the value at the
- Seed input, and holds output at that value. If two modules have
- the same seed value, and they are given a hold pulse at the same
- time, they will then produce exactly the same string of random
- numbers. This is also the effect of Alpha module Random Reset
- input. However, the Alpha hold input simply freezes the output,
- and does not generate a new seed.
-
- Seed "S" input: The seed value for a new random number run. The
- module is capable of producing 256 different random runs, one for
- each possible seed value of 0-FF hex. After setting the new seed
- value, a Hold or a Alpha Random Reset is required put it into
- effect. Note that for the module to produce a unique set of
- random numbers, it must be started with a unique seed. Conversely,
- two or more modules will have the same set of numbers if they are
- given the same seed value.
-
- Limit (up-arrow) input: Set upper limit that can be generated.
- Exclusive: a setting of 8 will produce 0-7.
-
- Offset "+" input: Added to the current output.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 49
-
-
-
- ----------------------------------------------------------------------
- Up/Down Random Number Generator RANDOM 1,2 \A8
-
- Output: A random number within set limits. Uses program code as the
- random number source, allowing successive numbers to be accessed
- as a forward or backward run, at some sacrifice of uniformity in
- distribution.
-
- Clock (heart) input: Non-zero after zero will cause a new random
- number to be generated.
-
- Hold (check) input: Non-zero resets the seed to the value at the
- Seed input, and holds output at that value. If two modules have
- the same seed value, and they are given a hold pulse at the same
- time, they will then produce exactly the same string of random
- numbers. This is also the effect of Alpha module Random Reset
- input. However, the Alpha Hold simply freezes the output, and
- does not generate a new seed.
-
- Seed "S" input: The seed value for a new random number run. The
- module is capable of producing 256 different random runs, one for
- each possible seed value of 0-FF hex. After setting the new seed
- value, a Hold or a Alpha Random Reset is required put it into
- effect. Note that for the module to produce a unique set of
- random numbers, it must be started with a unique seed. Conversely,
- two or more modules will have the same set of numbers if they are
- given the same seed value.
-
- Up/down "+/-" input: Changing from zero to non-zero (or vice versa)
- changes the direction of the random number run, causing successive
- numbers to be repeated in an inverse run.
-
- Limit (up-arrow) input: Set upper limit that can be generated.
- Exclusive: a setting of 8 will produce 0-7.
-
- ----------------------------------------------------------------------
- Random Logic RANDOM 1,3 \AD
-
- Output: TRUE (1) or FALSE (0) at 50% probability.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 50
-
-
-
- ----------------------------------------------------------------------
- Dither Logic RANDOM 2,1 \04
-
- Output: TRUE (1) or FALSE (0), the probability of which is set by
- the Dither input.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
- Dither "%" input: The value at this input is compared to an
- internally generated random number in the range of 0-FF (hex). If
- the the value is greater than the random number, the output will
- be TRUE, if less or equal it will be FALSE. The effect of this is
- the higher the Dither value, the more often the output will be
- TRUE. If the value is 0, the output will always be FALSE; if 40
- (hex), it will be TRUE 1/4 of the time; if 80 (hex), it will be
- TRUE 1/2 of the time; if C0 (hex), it will be TRUE 3/4 of the
- time; if FF (hex) it will be TRUE 255/256 of the time.
-
- ----------------------------------------------------------------------
- Dither Toggle Switch RANDOM 2,2 \05
-
- Output: A copy of the Value input or 0, the probability of which is
- set by the Dither input.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
- Dither "%" input: The value at this input is compared to an
- internally generated random number in the range of 0-FF (hex). If
- the the value is greater than the random number, the output will
- be a copy of the Value input, if less or equal it will be 0. A
- value of 20 (hex) will switch to the Value input 1/8 of the time,
- and to 0 7/8 of the time.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Dither Switch RANDOM 2,3 \06
-
- Output: A copy of the value at input "a" or "b", the probability of
- which is set by the Dither input.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
- Dither "%" input: The value at this input is compared to an
- internally generated random number in the range of 0-FF (hex). If
- the the value is greater than the random number, the output will
- be a copy of the "b" input, if less or equal it will be a copy of
- the "a" input. A value of 40 (hex) will switch to the "a" input
- 3/4 of the time, and to the "b" input 1/4 of the time.
-
- Value "a" and "b" inputs: Any value.
-
- Offset "+" input: Added to the current output.
-
-
-
-
-
-
- 51
-
-
-
- ----------------------------------------------------------------------
- Odds Switch RANDOM 3,1 \AC
-
- Output: A copy of the value at input "a", "b", "c", or "d", with the
- odds of selecting a particular input geometrically decreasing.
- Odds of selecting the "a" input is 1:2, of "b" is 1:4, of "c" is
- 1:8, of "d" is 1:16.
-
- Clock (heart) input: Any non-zero after zero will cause a new input
- to be selected.
-
- Inputs "a", "b", "c", and "d": Any value.
-
- Offset "+" input: Added to the current output.
-
- ----------------------------------------------------------------------
- Odds Generator RANDOM 3,2 \84
-
- Output: One of the numbers 0-7 with the odds of generating a
- particular number geometrically decreasing. Odds of producing 0
- is 1:2, of 1 is 1:4, of 2 is 1:8, .... , of 7 is 1:256.
-
- Clock input: Any non-zero after zero will cause a new number to be
- generated.
-
- ----------------------------------------------------------------------
- Interference Pattern Dither RANDOM 3,3 \8E
-
- Purpose: Generate a pattern by the interference of up to four
- independent dither inputs.
-
- Output: Values of 0 - F (hex), weighted according to dither input
- values.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
- Dither "%" inputs: These four dither values each determine the
- frequency weighting of a bit position of the output value that
- will be on or off. If only the first is used, the output pattern
- will be 0 - 1. If the first two are used the pattern will be 0 -
- 3, etc. When set to zero, the inputs are disabled.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 52
-
-
-
- ======================================================================
- PATTERN MODULES
- ----------------------------------------------------------------------
- Interval Generator PATTERN 1,1 !
- Pattern Generator PATTERN 1,2 \13
-
- Purpose: Generate a new pattern for the Chord Value Reader modules
- to read. The two modules are identical, except that the Interval
- Generator has one value input and three inputs that are offsets to
- the base value, where the Pattern Generator has four independent
- value inputs.
-
- Output: Address of the base value, 0-3. This is always 0 unless the
- Sort input is ON. After a sort, it is sometimes useful to know
- where the base value went.
-
- Page (paragraph symbol) input: These modules, plus the two Chord
- Value Reader modules and the Chord Value Writer module all use a
- group of sixteen four-byte memory cells as the data area. The Page
- input determines which of the 16 different chord groups is to be
- used.
-
- Base value "-->" input: This input will go to the zeroth (base) cell
- in the chord group.
-
- Interval value ">>" inputs to Interval Generator: These three inputs
- are each added to the Base value input, then they are sent to their
- respective locations in the chord group.
-
- Pattern value "-->" inputs to Pattern Generator: These three inputs
- are each sent directly to their respective locations in the chord
- group.
-
- Octave normalize "o" flag input: When non-zero, the four chord
- values will be normalized to the one octave range of 0 - 11.
-
- Offset "+" input: This value is added to the four chord values. If
- the octave normalize flag is non-zero, the offset value will be
- added AFTER normalizing.
-
- Sort "<->" flag input: When non-zero, the four chord values will be
- sorted in ascending order prior to writing them to the chord group
- table.
-
- Octave fold "f" input: Active when Sort flag is non-zero. Sets the
- octave range within which the four chord values will be folded. 0
- sets a range of 0-11, 1 sets 0-23, 2 sets 0-35, etc.
-
- Write Strobe "!" input: Non-zero after zero will cause a the
- currently paged four-value chord group to be written with the
- module's values.
-
-
-
-
-
-
-
-
-
-
-
- 53
-
-
-
- ----------------------------------------------------------------------
- Chord Value Writer PATTERN 1,3 @
-
- Purpose: Allow writing to individual values of the chord table.
-
- Output: Previous value.
-
- Page (paragraph symbol) input: Set which of the 16 different chord
- groups is to be written to.
-
- Position "@" input: Determines the position in the four-value chord
- table to which the input will be written. Zero writes to the
- first value in the table, one writes to the second, etc.
-
- Value "-->" input: This input will go to the addressed cell in the
- chord group.
-
- Octave normalize "o" flag input: When non-zero, the input value will
- be normalized to the one octave range of 0 - 11.
-
- Offset "+" input: This value is added to the input value prior to
- writing to the chord table. If the octave normalize flag is non-
- zero, the offset value will be added AFTER normalizing.
-
- Write Strobe "!" input: Non-zero after zero will cause the addressed
- chord table value to be replaced by the module's current value
- input. The previous chord table value is sent to the output.
-
- ----------------------------------------------------------------------
- Chord Value Reader PATTERN 2,1 \80
- Chord Value Reader PATTERN 2,2 \87
-
- Purpose: Up to four modules can be used together to read chords, or
- single modules can be used to generate patterns. The two modules
- are identical. Two are given to allow up to 32 copies of the
- module, rather than the usual 16.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
- Page (paragraph symbol) input: Set which of the 16 different chord
- groups is to be read from.
-
- Position/Order "@" input: When the Sort input is zero, this input
- determines the position in the four-value chord table from which
- the output will be read. Zero reads the first value in the table,
- one reads the second, etc. When the Sort is non-zero, this input
- determines the ascending order that will be read. Zero reads the
- lowest of the four values, one reads the next higher, etc.
-
- Sort "<->" flag input: When non-zero, the module will determine the
- ascending order of the values in the chord table, and send the
- value selected by the Order input to the output. The actual
- position of the values in the chord table is unchanged.
-
- Offset "+" input: This value is added to the output.
-
-
-
-
-
-
- 54
-
-
-
- ----------------------------------------------------------------------
- Pattern Line Generator PATTERN 3,1 :
-
- Purpose: Generate a pattern line for bass patterns, etc. by adding
- or subtracting an input value with the current output value.
-
- Output: Accumulated pattern value.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
- Hold (check) input: When non-zero, output will hold at its current
- setting, and the clock input is ignored.
-
- Reset "!" strobe: Non-zero after zero causes the Start value input
- to be sent to the output.
-
- Start value "-->" input: Value that starts the module after a reset,
- and the value that the module returns to when an overflow beyond
- the Range limit is detected. Acts as a "center" to the pattern
- that will be generated.
-
- Range limit "#" value: Sets the limit above and below the Start
- value. When the output plus the next step exceeds this limit, the
- module automatically resets to the Start value. Must be greater
- than zero for a pattern to be generated.
-
- Up/Down "+/-" input: Add "+" input to the output if zero, subtract
- "-" input from the output if non-zero.
-
- Positive value "+" input: Any value.
-
- Negative value "-" input: Any value.
-
- ----------------------------------------------------------------------
- Tone Row Generator PATTERN 3,2 \EC
-
- Purpose: Produce a 12 note tone row. The values are 0-11, non-
- repeating. The order is randomized each time a Strobe input is
- given.
-
- Output: Value of 0 - 11, as accessed by the Address input, and as
- ordered by the most recent Strobe.
-
- Address "@" input: Values of 0-11 will address one of the 12 tone
- values in the tone row. Values greater than 11 are normalized to
- the 0 - 11 range.
-
- Strobe "!" input: Non-zero after zero will cause a new tone row to
- be generated.
-
-
-
-
-
-
-
-
-
-
-
-
- 55
-
-
-
- ----------------------------------------------------------------------
- Interference Pattern Generator PATTERN 3,3 \8F
-
- Purpose: Generate a pattern by the interference of up to four
- independent strobe inputs.
-
- Output: Values of 0 - F (hex), according to Strobe input pattern.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated.
-
- Strobe "!" inputs: These four input strobes each determine a bit
- position of the output value that will be on or off. If only the
- first is used, the output pattern will be 0 - 1. If the first two
- are used the pattern will be 0 - 3, etc.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 56
-
-
-
- ======================================================================
- MIDI MODULES
-
- These modules typically go at the end of the computation loop
- (highest priority numbers). This is important because when the
- computer calculates a value after sending a previous value to the
- output, a glitch may be heard that is the result of the sound being
- delayed one MIDI clock cycle.
-
- As their function is to send data out of the computer, usually to a
- MIDI device (rather than to another module), most do not have the
- cyan module output display.
-
- ----------------------------------------------------------------------
- MIDI Note MIDI 1,1 1
- MIDI Note MIDI 1,2 2
- MIDI Note MIDI 1,3 3
- MIDI Note MIDI 1,4 4
-
- Purpose: MIDI Key on/Key off output channel(s) for up to 4 notes at
- a time. The four modules are identical. Two are given to allow up
- to 64 copies of the module, rather than the usual 16.
-
- Channel "c" input: MIDI channel number. If two MPU's are used, 32
- MIDI channels are possible, with 0-F hex going to MIDI channels 1-
- 16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
- the second MPU.
-
- Mute "/0/" and "&" inputs: These two inputs are internally ANDed, if
- the result is non-zero, MIDI output is enabled, and the red dot in
- the label is highlighted; if zero, MIDI output is inhibited. The
- input pair is optimized for usage with the Mute module, described
- in the chapter "SPECIAL".
-
- Transpose "t" inputs: These two inputs are identical. The values
- are summed and then added to each of the 4 Note value inputs prior
- to sending them to MIDI. The obvious way to use this input is to
- transpose all the Note inputs by the same value. A less obvious
- use is to set the Note inputs to base chord values (a major triad,
- for example would be 0, 4, and 7; a minor triad would be 0, 3, and
- 7), then set the Velocity inputs as desired, then use the
- Transpose input to play chords.
-
- Velocity Offset "v" input: This is similar to the Transpose input
- above, except that the value is added to the 4 Velocity inputs.
- Also, to avoid sending out notes with zero values from unused
- Note/Velocity inputs, the Velocity Offset only affects "in use"
- Velocity values. It will not generate new notes by setting it to
- zero, then to some value.
-
- Key Release "r" input: The velocity value sent with Key Off for each
- of the 4 Note inputs. Most synthesizers ignore release velocity.
-
-
-
-
-
-
-
-
-
-
- 57
-
-
-
-
- Inputs "A" to "D": Keyboard note values.
- Inputs "a" to "d": Keyboard velocity values.
-
- These 4 pairs of inputs allow the module to play up to 4 notes
- polyphonically. (If more than 4 poly notes are needed, two or
- more modules may be given the same MIDI channel number.) The upper
- case inputs accept the MIDI note value of 0-7F hex, with 3C
- hex equivalent to Middle C. The corresponding lower case inputs
- send polyphonic Key-on velocity.
-
- Note values are sent when changed. Velocity changes are ignored
- except zero transitions. When Velocity = 0, a Key-off message is
- sent with the currently saved note and with the velocity taken
- fromn the "r" input; the first non-zero Velocity seen will send a
- Key-on message with the note value at the input, and the given
- velocity level. While Velocity stays non-zero, any change in note
- values will cause an immediate Key-off message with the old note,
- then a Key on message with the new note, and the latest Velocity
- value for that note.
-
- MIDI protocol requires that a key-on message be balanced by a
- corresponding key-off message (or key-on with velocity set to 0).
- To simplify the module's use, and to reduce the likelihood of
- producing a "stuck note", the module must handle key-on/key-off
- messages in an intelligent (for a computer) manner.
-
- This module applies the following rules to changes detected in the
- note and velocity value inputs:
-
- 1. If pitch changes, and velocity is zero, nothing happens.
- 2. If pitch changes, and velocity is non-zero, the preceding
- note value is sent with a key-off message, then the new
- note value is immediately sent with a key-on message and the
- currently set velocity value.
- 3. When the velocity input goes from zero to non-zero, a key-on
- message is sent with the current note and velocity values.
- 4. When the velocity input goes from non-zero to zero, a
- key-off message is sent for the currently sounding note.
-
- Translation: If there is anything other than zero at the velocity
- input, a change in the note input will cause a new note to play.
- Changes in the velocity input of zero to non-zero (such as a clock
- would produce) will turn a note off and on.
-
- ----------------------------------------------------------------------
- MIDI Control Output MIDI 2,1 \99
- MIDI Control Output MIDI 2,2 \9A
-
- Purpose: MIDI output module for various control messages. Sends
- Patch Change, Aftertouch, Pitch Bend, and 8 Control Change
- messages. All parameters are sent when changed. The two modules
- use different Control Change maps (see chapter "SYSTEM" for
- details), but otherwise are identical. Two are given to allow up
- to 32 copies of the module, rather than the usual 16.
-
- Channel "c" input: MIDI channel number. If two MPU's are used, 32
- MIDI channels are possible, with 0-F hex going to MIDI channels 1-
- 16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
- the second MPU.
-
-
- 58
-
-
-
-
- Hold (check) input: If zero, MIDI output is enabled, and the red dot
- in the label is highlighted; if non-zero, MIDI output is inhibited.
-
- Program Change "Pt" input: MIDI Program Number to be sent.
-
- Aftertouch "a" input: Sends Channel Key Pressure (Aftertouch)
- message, followed by input value. Note that this is the
- aftertouch message that affects all notes on that MIDI channel,
- not the individual key aftertouch message (which is generally not
- supported by synthesizer manufacturers).
-
- Pitch Bend "b" input: Sends MIDI Pitch Bend Message. This input
- allows a range of 0 FF hex, with 80 hex as the midway setting (as
- seen on most synth Pitch Bend control wheels).
-
- Control Change "V", "M", "A-D", and "1-2" inputs: Sends MIDI Control
- Change messages. The actual Control Change number is set by one
- of the two the Control Map modules (see chapter on SYSTEM
- modules). Inputs "1" and "2" are for on/off values, they force all
- non-zero input values to 127 before sending them out to MIDI.
-
- Default Control Change message values, with Yamaha's names:
-
- V = 7 = Volume
- M = 1 = Modulation Wheel
- A = 2 = Breath Controller
- B = 3 = Unspecified
- C = 4 = Foot Controller
- D = 5 = Portamento Time
- 1 = 64 = Sustain Foot Switch
- 2 = 65 = Portamento Foot Switch
-
- ----------------------------------------------------------------------
- MIDI Program Change MIDI 2,3 \9E
-
- Purpose: Change MIDI Patch programs. Supplement to Program Change
- input of the MIDI Control Output module.
-
- Output: MIDI Program Number.
-
- Channel "c" input: MIDI channel number. If two MPU's are used, 32
- MIDI channels are possible, with 0-F hex going to MIDI channels 1-
- 16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
- the second MPU.
-
- Delay (right-angle) input: Ammount of delay after sending program
- change. To avoid loosing data when controlling MIDI matrix
- switchers, the MIDI output buffer is cleared prior to sending the
- patch change, and a delay can be inserted after the message is
- sent. Each count delays for 1/580 second. A value of 3-4 is
- usually sufficient. No delay if set to 0 (the default).
-
- Strobe "!" input: Non-zero after zero sends the message.
-
- Value "-->" input: Patch Change value that will be sent upon strobe.
- ANDed with 7F hex to limit the value to the legal MIDI range.
-
-
-
-
-
- 59
-
-
-
- ----------------------------------------------------------------------
- MIDI Control Change MIDI 2,4 \98
-
- Purpose: Send MIDI Control Change message, Control Number, and
- Control Value to a MIDI output channel.
-
- Strobe "!" input: Any non-zero after zero will initiate a send.
-
- Channel "c" input: MIDI channel number. If two MPU's are used, 32
- MIDI channels are possible, with 0-F hex going to MIDI channels 1-
- 16 on the first MPU, and 10-1F hex going to MIDI channels 1-16 on
- the second MPU.
-
- Number "#" input: MIDI Control Number to be sent. ANDed with 7F
- hex to limit the value to the legal MIDI range.
-
- Value "-->" input: MIDI Control Value to be sent. ANDed with 7F hex.
-
- ----------------------------------------------------------------------
- MIDI System Exclusive Send MIDI 3,1 \11
-
- Purpose: Send MIDI System Exclusive data to MIDI output. Can be
- used for large sends of program data, or for small program change
- sends. Uses the 64K sequencer data area "A".
-
- Output: After a data send, the output will contain the 16 bit
- address of the end of the send +1, which could be the next
- available data block. If there is an error, the output will read
- "FFFF". Note that the output is 16 bits, rather than the usual 8.
- Use the shift input to read the high (Page) part.
-
- Address "@" input: Specify the starting address of the 64K sequencer
- data area "A" from which the MIDI data send will start.
-
- Page (paragraph symbol) input: Specify the starting page of the 64K
- sequencer data area "A".
-
- Strobe "!" input: Initiate the send. Module output is set to "XX",
- and flashes while data is being sent. Data is sent until a MIDI EOX
- (F7 hex) is found in the data stream.
-
- Shift ">>" input: Number of shifts to perform on output display.
- Each left shift is the same as a division by 2. A shift value of
- 8 will return the Page count.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 60
-
-
-
- ----------------------------------------------------------------------
- MIDI System Exclusive Receive MIDI 3,2 \12
-
- Purpose: Receive MIDI System Exclusive data from MIDI input. Useful
- for receiving large dumps of program data.
-
- General: This module is used in conjunction with the 64K sequencer
- data area "A", which is the data source for all System Exclusive
- receives.
-
- Output: After a data receive, the output will contain the 16 bit
- address of the end of the receive +1, which could be the next
- available data block. If there is an error, the output will read
- "FFFF". Note that the output is 16 bits, rather than the usual 8.
- Use the shift input to read the high (Page) part.
-
- Address "@" input: Specify the starting address of the 64K sequencer
- data area "A" that will receive the MIDI data.
-
- Page (paragraph symbol) input: Specify the starting page of the 64K
- sequencer data area "A".
-
- Strobe "!" input: Initiate the acceptance of a MIDI System Exclusive
- dump. Module output is set to "XX", and flashes while data is
- being received. Data is accepted until a MIDI EOX (F7 hex) is
- found in the data stream. If no EOX is detected after about 20
- seconds, the module will abort with an error.
-
- Shift ">>" input: Number of shifts to perform on output display.
- Each left shift is the same as a division by 2. A shift value of
- 8 will return the Page count.
-
-
- ----------------------------------------------------------------------
- MIDI System Exclusive Short Send MIDI 3,3 \15
-
- Purpose: Send a short System Exclusive message. Ideal for such
- things as Voice Bank Change in the Yamaha FB01.
-
- Strobe "!" input: Non-zero after zero initiates the send.
-
- Data "1-8" inputs: System exclusive data area. Up to 8 bytes can be
- sent. If less than 8 bytes are to be sent, set the last byte to
- FF hex. The status bytes (F0 hex to start and F7 hex to end) are
- sent by the module, so do NOT include them here.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 61
-
-
-
- ======================================================================
- DISPLAY MODULES
- ----------------------------------------------------------------------
- Linear Level Meter DISPLAY 1,1 \97
-
- Purpose: VU meter type display of two value inputs. The two
- vertical bars will be highlighted in proportion to the values at
- the left and right inputs. This meter responds linearly: the
- highlighted portion of the bar goes up one notch for each
- increment in the input value.
-
- Level "l" and "r" inputs: Level inputs for the left and right meter
- columns.
-
- Range (divide) input: Left and right input values will be divided by
- this value before being displayed.
-
- ----------------------------------------------------------------------
- Exponential Level Meter DISPLAY 1,2 \96
-
- Purpose: VU meter type display of two value inputs. The two
- vertical bars will be highlighted in proportion to the values at
- the left and right inputs. This meter responds exponentially:
- the highlighted portion of the bar goes up one notch for each
- doubling of the input value.
-
- Level "l" and "r" inputs: Level inputs for the left and right meter
- columns.
-
- Range "*" input: Left and right input values will be multiplied by
- this value before being displayed.
-
- ----------------------------------------------------------------------
- ASCII Character Display DISPLAY 2,1 \A0
-
- Value "-->" inputs: Any value in one of the three inputs will be
- displayed as a as an ASCII/IBM graphics character. The first
- input displays the character in the leftmost position, the next in
- the middle, the third in the right. Modules may be grouped
- together to form chartcter strings.
-
- ----------------------------------------------------------------------
- ASCII Character Display from sequencer area "A" DISPLAY 2,2 \86
-
- Address "@" input: Step address in the 65K byte sequencer area "A" at
- which to display three sequential bytes as ASCII/IBM graphics
- characters. The addressed input is displayed as the character in the
- leftmost position, the next in the middle, the third in the right.
- Modules may be grouped together to form chartcter strings.
-
- Page (paragraph symbol) input: Page number (high address) for the
- character display.
-
- Address shift (up-down arrow) input: Shifts the given address by the
- amount given at this input. This allows modules to be ganged
- together, but to be addressed by only one source. This shift will
- go across page boundaries. It is useful, for example, for
- displaying voice names of a synthesizer voice dump.
-
-
-
-
- 62
-
-
-
- ----------------------------------------------------------------------
- ASCII Character Display from sequencer area "B" DISPLAY 2,3 \83
-
- Address "@" input: Step address in the 256 byte sequencer at which
- to display three sequential bytes as ASCII/IBM graphics
- characters. The addressed input is displayed as the character in
- the leftmost position, the next in the middle, the third in the
- right. Modules may be grouped together to form chartcter strings.
-
- Page (paragraph symbol) input: Page number (high address) for the
- character display. Valid Page numbers are 0-F hex.
-
- Address shift (up-down arrow) input: Shifts the given address by the
- amount given at this input. This allows modules to be ganged
- together, but to be addressed by only one source.
-
- ----------------------------------------------------------------------
- Decimal Display DISPLAY 3,1 .
-
- Value "-->" input: Any value will be displayed in decimal.
-
- ----------------------------------------------------------------------
- Note Display DISPLAY 3,2 \D5
-
- Value "-->" input: Any value will be displayed as a as a
- note+octave. Assumes C major scale ascending, with Octave 5 =
- Middle C.
-
- ----------------------------------------------------------------------
- Binary Display DISPLAY 3,3 ;
-
- Value "-->" input: Any value will be converted to one of 8 bit
- positions and highlighted if the bit is on, lowlighted if the bit
- is off.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 63
-
-
-
- ======================================================================
- SLEW MODULES
- ----------------------------------------------------------------------
- Peak/Valley Generator with internal clock SLEW 1,1 i
- Peak/Valley Generator with internal clock SLEW 1,2 j
-
- Purpose: Generate a smooth path (always steps by 1) toward a
- bounded, randomly selected target. Optomized to produce moving
- note velocity values.
-
- Output: Always one more or less than last output, depending on
- direction of travel and whether the target has been reached. Upon
- reaching the internally generated random target, the up/down
- direction reverses.
-
- Count "c" input: Number of clocks before the next output value is
- calculated.
-
- Range (up-arrow) input: internally generated target is limited to
- one less than this value. One fourth of this value is then added
- to the output as an automatic offset. For example, if the range
- is 10 hex, actual values will range from 4 to 13 hex.
-
- ----------------------------------------------------------------------
- Peak/Valley Generator SLEW 2,1 k
-
- Purpose: Generate a smooth path (always steps by 1) toward a
- bounded, randomly selected target.
-
- Output: Always one more or less than last output, depending on
- direction of travel and whether the target has been reached. Upon
- reaching the internally generated random target, the up/down
- direction reverses.
-
- Clock (heart) input: Any non-zero after zero causes the current output
- value to be incremented/decremented.
-
- Hold (check) input: Non-zero holds current output.
-
- Range (up-arrow) input: internally generated target is limited to
- one less than this value.
-
- Offset + input: Added to the output.
-
- ----------------------------------------------------------------------
- Peak/Valley Generator with arbitrary step size SLEW 2,2 l
-
- Purpose: Generate a slope with arbitrary step size toward a bounded,
- randomly selected target.
-
- Output: Last output (less offset) plus/minus the value of the step
- size, depending on direction of travel and whether the target has
- been reached. Upon reaching the internally generated random
- target, the up/down direction reverses.
-
- Clock (heart) input: Any non-zero after zero causes the current output
- value to be incremented/decremented.
-
- Hold (check) input: Non-zero holds current output.
-
-
-
- 64
-
-
-
- Range (up-arrow) input: internally generated target is limited to
- one less than this value.
-
- Step Size "+/-" input: Any value, although large numbers will
- normally be of little use.
-
- Offset + input: Added to the output.
-
- ----------------------------------------------------------------------
- Fast Slew SLEW 3,1 \E5
-
- Purpose: Slew from value "a" to value "b" at rate "r". Generally
- used for fast slews that do not need to step sequentially through
- each of the intermediate values.
-
- General: Whenever a change is detected in either the "a" or the "b"
- input, the module will set the output to the value at the "a"
- input, then, each calculation cycle, it will decrement the output
- at a rate determined by the formula below, until the output
- reaches the value that was in the "b" input at the time the module
- started slewing.
-
- To slew from one value to another like an analog lag processor,
- plug the output into tha "a" input, and the value to be slewed
- into the "b" input. Whenever the "b" input changes, the output
- will slew from the last value at "b" to the new value.
-
-
- Formula:
-
- initialize:
- input (a) * rate (r) --> sum (internal)
- input --> output
-
- thereafter until sum/rate = target (b):
- sum - input + target --> sum
- sum/rate --> output
-
-
- Output: Slewed input, according to the above formula.
-
- Start "a" input: Any value.
-
- Target "b" input: Any value.
-
- Rate "r" input: Any value, but useful values are dependent on the
- slew speed, and the magnitude of the difference between the start
- and target inputs. Values below about 10 (hex) are seldom useful.
-
- ----------------------------------------------------------------------
- Slow Slew SLEW 3,2 \EB
-
- Purpose: Slew from value "a" to value "b", over a cycle time "t".
- Generally used for slower slews, or for slews that must step
- sequentially through each of the intermediate values.
-
- General: Whenever a change is detected in either the "a" or the "b"
- input, the module will set the output to the value at the "a"
- input, then, each calculation cycle, it will decrement the output
- at a rate determined by the formula below, until the output
-
-
- 65
-
-
-
- reaches the value that was in the "b" input at the time the module
- started slewing.
-
- To slew from one value to another like an analog lag processor,
- plug the output into tha "a" input, and the value to be slewed
- into the "b" input. Whenever the "b" input changes, the output
- will slew from the last value at "b" to the new value.
-
- Formula:
-
- initialize:
- input (a) * 256 --> sum (internal)
- input --> output
-
- thereafter until sum/256 = target (b):
- at every nth cycle, determined by cycle time (t):
- sum - input + target --> sum
- sum/256 --> output
-
- Output: Slewed input, according to the above formula.
-
- Start "a" input: Any value.
-
- Target "b" input: Any value.
-
- Time "t" input: Any value, but values greater than about 10 (hex)
- are VERY slow.
-
-
- ----------------------------------------------------------------------
- Filter SLEW 3,3 \9F
-
- Output: Average of last clocked 2, 4, 8, or 16 Value inputs,
- depending on current value of Filter input.
-
- Clock (heart) input: Any non-zero after zero will cause the current
- value input to be averaged with the preceding inputs, and a new
- average will be sent to the Output.
-
- Filter "f" input: Values of 0-3 (input is ANDed with 3) will set the
- number of inputs to be averaged to 2, 4, 8, or 16. This is very
- similar to a Filter Cutoff input on an analog low pass filter, or
- the lag time on an analog lag processor: higher numbers will cause
- greater lag.
-
- Offset "+" input: Added to the current output.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 66
-
-
-
- ======================================================================
- SAMPLE MODULES
- ----------------------------------------------------------------------
- Echo SAMPLE 1,1 \90
-
- Purpose: This module is actually a special case of a sequencer,
- designed to write into one memory location while also reading from
- another location. The difference between these locations is the
- amount of delay (in clocks) between the input value and output
- value. Unlike the general sequencers, which allow specific
- addressing of any memory cell in their address range, the Echo
- module allows addressing of runs of 16 memory cells, with the
- exact cell in a particular run addressed by an internal index.
- Like all sequencers, no memory locations will be written if the
- Write Enable input is zero; it will merely loop thorugh the
- addressed 16 step run of previously stored data.
-
- Magenta User Input (just left of label tag): Current 16-step run.
- There are 16 runs of 16 steps each. This input is used to
- manually set the desired run, 0-F hex. Defaults to the same run
- as the module number, so each module has a unique sequence storage
- area. Can be changed for special effects.
-
- Output: Copy of the memory cell addressed by the internal index plus
- the value at the Delay input ANDed with F hex to stay within the
- 16 cell range. Note that the output is fetched BEFORE writing a
- new value to memory, allowing a read/write of the same memory cell
- during the same clock tick.
-
- Clock (heart) input: Any non-zero after zero will cause a new output
- to be generated, and if the write enable is non-zero will save the
- current Value input.
-
- Delay ">>" input: Sets the negative offset from the current internal
- index that the module will read data from. Since Value data is
- always written to the run at the current internal index, and is
- read at the internal index minus the value at the Delay input, the
- effect of this input is to control the number of clocks by which
- the output will lag the input. Note that the run length is 16
- memory cells, therefore values over 15 (F hex) are normalized by
- ANDing them with F (hex).
-
- Write Enable (omega) input: Any non-zero allows storing the Value
- input data into the run. Changing this input between non-zero and
- zero while it is playing has the effect of looping a previously
- tracked run of notes, and can often be used to good effect.
-
- Value "-->" input: Value to be written when Write Enable is ON.
- With the Delay input set to zero and the Write Protect input set to
- non-zero, the output should track the Value input. If it does not,
- it is likely that the priority number of the Delay module is not
- high enough, and it is detecting input from a module (with a higher
- priority number) that is being calculated only AFTER being stored
- by the Delay module. You can fix this by swapping a few priority
- numbers, or you can ignore it and allow the Delay input to be 1
- clock higher than it says.
-
- Offset "+" input: Added to the current output.
-
-
-
-
- 67
-
-
-
-
- ----------------------------------------------------------------------
- Delay SAMPLE 1,2 \D0
-
- Purpose: Delays the output by a set number of MIDI clocks.
-
- Output: A copy of the input, delayed up to 255 clock cycles.
-
- Value "-->" input: Any value.
-
- Delay "c" input: Number of MIDI clocks (calculation cycles) by which
- the output is to lag the input. When 0, the input is simply
- echoed to the output. When 1, the output will follow the input by
- 1 MIDI clock, when FF (hex), the output will follow by 255 clocks.
-
- Offset "+" input: Added to the current output.
-
- ----------------------------------------------------------------------
- Peak Hold SAMPLE 2,1 \1E
-
- Output: Highest value seen at the Value input since last Reset.
-
- Reset input: Non-zero copies Value input to Output.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Valley Hold SAMPLE 2,2 \1F
-
- Output: Lowest value seen at the Value input since last Reset.
-
- Reset input: Non-zero copies Value input to Output.
-
- Value "-->" input: Any value.
-
- ----------------------------------------------------------------------
- Sample and Hold SAMPLE 3,1 \15
-
- Output: Copy of Value input plus Offset input as set by the last
- Strobe or Track.
-
- Track "=" input: Non-zero tracks current input; zero holds.
-
- Strobe "!" input: Non-zero after zero takes a new sample.
-
- Value "-->" input: Value to be sampled.
-
- Offset "+" input: Added to sampled/tracked input.
-
- ----------------------------------------------------------------------
- Delta SAMPLE 3,2 \7F
-
- Output: The absolute difference between the current Value input and
- the last different Value input. Effect is to generate a constant
- rate of change (delta) when the Value input is changing, and to
- hold it at the last delta while the Value input remains constant.
-
- Value "-->" input: Any value.
-
-
-
-
- 68
-
-
-
- ======================================================================
- BOUNDS MODULES
- ----------------------------------------------------------------------
- Maximum BOUNDS 1,1 \18
-
- Output: Copy of the greater of the two Value inputs.
-
- Value inputs: Any values.
-
- ----------------------------------------------------------------------
- Minimum BOUNDS 1,2 \19
-
- Output: Copy of the lesser of the two Value inputs.
-
- Value inputs: Any values.
-
- ----------------------------------------------------------------------
- Bounds BOUNDS 1,3 \17
-
- Output: Copy of the Value input, bounded by the MAX and MIN inputs.
-
- MAX input: Sets upper bounds. Inclusive.
-
- MIN input: Sets lower bounds. Inclusive.
-
- ----------------------------------------------------------------------
- Quantize BOUNDS 2,1 \FC
-
- Output: Copy of the Match input that most nearly matches the Value
- input.
-
- Normalize (divide-symbol) input: When not zero, quantizing is done
- on multiples of this value. Setting to C hex, for example, will
- normalize to an octave. When zero the input is disabled.
-
- Value "-->" input: Any value.
-
- Match inputs "a" - "h": These eight inputs are set to values that
- will be matched with the Value input. Can be used to good effect
- to force a random number to conform to a scale, or to transform
- one scale to another. Note that the match is calculated starting
- with input "a", and in the event of a tie, the first match is
- used. This means that if the Value input was 7, input "a" was 6,
- and input "b" was 8, and no other input was 7, the output would be
- 6; however if input "a" was 8 and input "b" was 6, the output
- would be 8.
-
- ----------------------------------------------------------------------
- Sort BOUNDS 2,2 \1D
-
- Output: One of the four inputs determined by the ascending order of
- the input values, as selected by the Order input.
-
- Order "@" input: This input determines the ascending order of the
- inputs that will be read. Zero reads the lowest of the four
- values, one reads the next higher, etc.
-
- Value inputs "a" - "d": Any values, any order.
-
-
-
-
- 69
-
-
-
- ----------------------------------------------------------------------
- Approximate Value BOUNDS 3,1 \F7
-
- Output: An approximate (within set limits) copy of the input.
-
- Value "-->" input: The base value, which is approximately echoed at
- the output. A change in this input will cause a new output to be
- generated.
-
- MAX (up arrow) input: Set upper limit of approximation. Inclusive.
-
- MIN (down arrow) input: Set lower limit of approximation. Inclusive.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 70
-
-
-
- ======================================================================
- OCTAVE MODULES
- ----------------------------------------------------------------------
- Octave to Note OCTAVE 1,1 \F8
-
- Output: Note value of given octave plus offset.
-
- Octave value "-->" input: Octave number to be translated into the
- note value. Input is multiplied by 12 to give the note value.
-
- Offset "+" input: Any value, added to the output.
-
- ----------------------------------------------------------------------
- Octave of Note OCTAVE 1,2 \F6
-
- Output: Octave number of given note value.
-
- Note value "-->" input: Note value to be translated into an octave
- number. Input is divided by 12 to give the octave number.
-
- ----------------------------------------------------------------------
- Octave Normalize OCTAVE 2,1 \A2
-
- Output: Base note value of given note plus offset.
-
- Note value "-->" input: Note value to be normalized to a base note
- range of 0 - 11. Input is multiplied by 12, and the remainder is
- returned as the base note value.
-
- Offset "+" input: Any value, added to the output AFTER normalizing.
-
- ----------------------------------------------------------------------
- Note Fold OCTAVE 2,2 \F4
-
- Output: Note value of given note folded to within a given octave
- range, plus offset.
-
- Note value "-->" input: Note value to be folded into a base octave
- range between 0 and the given octave fold range.
-
- Octave fold range "o" input: Octave range that the note input will
- be translated to. A value of 0 gives a note value of 0 - 11, 1
- gives a note value of 0 - 23, etc.
-
- Offset "+" input: Any value, added to the output AFTER folding.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 71
-
-
-
- ======================================================================
- SPECIAL MODULES
-
- These modules allow MusicBox to interface with external input/ output
- ports, and with external programs. Because they allow direct access
- to the computer internals, if they are used without knowing exactly
- what is going on, they will likely cause the computer to crash.
-
- ----------------------------------------------------------------------
- External Call SPECIAL 1,1 \8A
-
- Purpose: Allow MusicBox to control non-MIDI devices, or allow
- installation of custom functions. Access to other programs is
- available through use of software interrupts. Usually, the
- programs will be of the "terminate but stay resident" type, such
- as the Microsoft Mouse driver.
-
- Output: Contents of flag register after the software interrupt.
-
- Strobe "!" input: Non-zero after zero will trigger the module,
- transferring control from MusicBox to the external interrupt.
-
- Interrupt number "e" input: The interrupt vector that will be called
- when strobed.
-
- Register "A" to "d" inputs: CPU registers are loaded with these
- values prior to calling the interrupt. Input "A" goes to AH, "a"
- to AL, "B" to BH, etc.
-
-
- ----------------------------------------------------------------------
- External Call Registers SPECIAL 1,2 \88
-
- Purpose: Allow access to CPU registers after an external call.
-
- Output: Value of selected register at last strobe.
-
- Strobe "!" input: Non-zero after zero will cause the currently
- addressed register data to be sent to the output.
-
- Register select "r" input: Select one of 8 CPU registers to be sent
- to the output:
-
- 0 = AL 1 = AH
- 2 = BL 3 = BH
- 4 = CL 5 = CH
- 6 = DL 7 = DH
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 72
-
-
-
- ----------------------------------------------------------------------
- Outport SPECIAL 2,1 \95
-
- Purpose: Send a byte to the computer output port.
-
- Strobe "!" input: Non-zero after zero will trigger the module,
- sending the byte at the value input out to the port addressed by
- the "P" and "p" inputs.
-
- Value "-->" input: The value to be sent to the output port.
-
- Port address high "P" input: Most significant byte of port address.
-
- Port address low "p" input: Least significant byte of port address.
-
-
- ----------------------------------------------------------------------
- Inport SPECIAL 2,2 \8D
-
- Purpose: Fetch a byte from the computer input port.
-
- Output: Most recent results of an input fetch from the port
- addressed by the "P" and "p" inputs.
-
- Strobe "!" input: Non-zero after zero will trigger the module,
- fetching the byte to the output from the port addressed by the "P"
- and "p" inputs.
-
- Port address high "P" input: Most significant byte of port address.
-
- Port address low "p" input: Least significant byte of port address.
-
- ----------------------------------------------------------------------
- Peek SPECIAL 3,1 }
-
- Purpose: Fetch a byte from the computer memory.
-
- Output: Most recent results of a memory fetch from the byte
- addressed by the "$", "P" and "@" inputs.
-
- Strobe "!" input: Non-zero after zero will trigger the module,
- reading the byte from the memory location addressed by inputs "$",
- "P" and "@".
-
- Memory segment address "$" input: High byte of 8086 segment address
- used to address memory. Low byte is forced to 0. For example, to
- read from the Color Display Area, Segment address B800 (hex), set
- this input to "B8".
-
- Address high "P" input: Most significant byte of memory address.
-
- Address low "@" input: Least significant byte of memory address.
-
-
-
-
-
-
-
-
-
-
- 73
-
-
-
- ----------------------------------------------------------------------
- Poke SPECIAL 3,2 {
-
- Purpose: Write a byte to the computer memory.
-
- Value "-->" input: The value to be written to the computer's memory.
-
- Strobe "!" input: as in Peek, but triggers a memory write rather than
- a memory read.
-
- Memory segment address "$" input: as in Peek.
-
- Address high "P" input: as in Peek.
-
- Address low "@" input: as in Peek.
-
- ----------------------------------------------------------------------
- Mute Flags SPECIAL 3,3 \E8
-
- Purpose: Allow access to and program control of mute flags. Typically
- used as mute input to the MIDI Note module.
-
- Output: 8 bits of the 16 bit mute status, as positioned and selected
- by the Shift and Mask inputs.
-
- Mute "0" input: Mute switches 0-7. Last changed bit changes the
- switch. Bits ON highlight the lower left screen MUTE switches.
-
- Mute "8" input: Mute switches 8-F, as above.
-
- Shift ">>" input: Positions the 8 bit output to a window in the 16
- bit mute flags. Set at 0 to read flags 0-7, at 8 for flags 8-F.
-
- Mask "&" input: Allows individual flags to be isolated. Bits set hi
- allow the flags to pass through. Set to FF hex to disable.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 74
-
-
-
- ======================================================================
- SYSTEM MODULES
-
- System modules are unique in that there is only one copy made of each
- module. The label has "$" after the icon rather than the module
- number to indicate that it is a system module.
-
- ----------------------------------------------------------------------
- Alpha Control Module SYSTEM 1,1 \E0
-
- Purpose: Controls several global functions, some of which are only
- distantly related.
-
- Output: NZ when the HLT menu function is selected.
-
- Global Hold (check) input: Reset and Hold for all modules with Hold
- inputs. Allows all clocks, etc. to be held and sync'd with just
- the one Alpha Hold. When zero, if in play mode, the Program
- modules will sequence.
-
- Global Program module address "@" input: Change in value sets
- address parameter for all active Program modules.
-
- Mute/Solo "/o/" input: Non-zero sets mute mode for menu mute flags,
- non-zero sets solo mode.
-
- Play/Program (omega) input: Set Play/Program mode. Non-zero puts
- Program modules in Program mode, zero puts them in Play mode.
-
- Beats per Measure "|" input: This value and the value following will
- determine the "clocks per measure", which is used by the Measure
- clocks, the Note clocks, and (to determine the sequence rate) the
- Program module.
-
- Note value (note) input: Note value for the system time signature.
- 1 = whole, 2 = half, 3 = quarter, 4 = eighth, 5 = sixteenth, 6 =
- thirtysecond.
-
- This input plus the Beats per Measure input, above, are used like
- a standard time signature i.e., 3 in the Beats input and 3 (for a
- quarter note) in the note input would result in 3/4 time.
-
- The MIDI standard, which calls for 24 ticks per quarter note, is
- used by MusicBox to set note and measure values; but the actual
- temporal resolution -- the time value of the ticks -- is set by
- the Tempo input, below. It is important to realize that the
- "ticks" are actually calculation cycles. That is, for every tick,
- MusicBox calculates new values for every active module. This means
- that for every quarter note, the modules are calculated 24 times;
- for every eighth note they are calculated 12 times, every
- sixteenth note, 6 times, etc. This becomes important information
- when setting beat advances and retards, delay times, etc.
-
- Since for every quarter note, there are always 24 ticks; for every
- measure there are (ticks per note of the note value input) *
- (beats per measure value input) cycles.
-
- For 4/4 time, the default, there are (Note value = 3 = quarter
- note = 24 ticks) * (beats per measure = 4) = 96 (60 hex) ticks per
- measure.
-
-
- 75
-
-
-
-
- Tempo (diamond) input: Sets tempo in quater notes per minute. If
- the yellow time-overload indicator (below) is on, the tempo
- becomes inaccurate.
-
- Timing is controlled by an internal real-time clock, which
- generates interrupts at the rate of some 580 times per second.
- The Tempo input allows the user to set the number of these
- interrupts that will occur between module calculation cycles
- ("ticks"). The effect is the same as setting a metronome. The
- default tempo is 120 (78 hex). When set to FF hex, the computer
- will process the modules at maximum speed.
-
- Random number reset "?" input: Non-zero holds all random number
- generators, and sets the seed to that value, or to the seed
- specified at the module. The pattern of numbers generated is
- repeatable and is dependent on the starting seed value.
-
- MIDI Sync "s" input: Bit 0 sets MIDI output sync: if non-zero, a
- MIDI sync pulse is output. Bit 1 sets MusicBox tempo to sync with
- an externally produced MIDI sync pulse. Bit 1 or 2 inhibits
- normal sending of MIDI Active Sensing.
-
- MIDI sync is used for recording Midi data to an external sequencer
- from MusicBox. If the external sequencer sync is set to "internal
- sync" (it is generating the MIDI sync), set the "s" value to 2,
- for MusicBox to accept MIDI sync instead of using its own internal
- timing for generating the tempo.
-
- If the external sequencer/recorder is set to "MIDI sync" (it wants
- to get its sync from MIDI), set the "s" value to 1 so that
- MusicBox will generate a MIDI sync signal.
-
- Halt "0" input: Non-zero (except FF) in this input is the same as
- selecting the menu HLD command. If this value is set to FF,
- MusicBox will exit to DOS, as if the QUIT command was selected.
-
- Indicator (yellow): This number is the calculation cycles available
- before time-overload. The greater the number, the more
- calculating time remains available. The value will decrease
- either when more modules are added or when the Tempo is increased.
- When it reaches 0, the yellow indicator will highlight.
- Everything will continue to work ok, but timing values will no
- longer be absolute or accurate.
-
- When the Sync input is set to 2 (external MIDI sync), then the
- readout is simply a count of the incomming MIDI sync data. It
- will appear as a rapidly counting index as the external sync is
- received.
-
- ----------------------------------------------------------------------
- MIDI Real Time SYSTEM 1,2 \9D
-
- Purpose: Send and/or receive MIDI Real Time messages. Most commonly
- used when saving MusicBox output to an external MIDI sequencer-
- recorder. Most of these devices need a Start message in addition
- to the MIDI sync signal (set by the Alpha module). MIDI Stop,
- Start, and Continue messages can be sent and received; Reset and
- Tune Request messages can be sent.
-
-
-
- 76
-
-
-
- Output: Bits 0, 1, and 2 correspond to Stop, Start and Continue
- messages being received at the MIDI data input. These bits are
- latched; they can be cleared by the "!" input.
-
- S, G, C, R, and T inputs: Transitions from zero to non-zero at these
- inputs will send MIDI System Real Time messages for Stop, Start
- (Go), Continue, Reset, and Tune request. Note that when these
- messages are sent they may be passed through by the receiving
- device and be detected at the MIDI input of MusicBox, and echoed
- as bits set at the module output.
-
- Clear "!" input: Transition from zero to non-zero resets the module
- output to zero.
-
- ----------------------------------------------------------------------
- MIDI Control Change Map SYSTEM 2,1 \94
- MIDI Control Change Map SYSTEM 2,2 \81
-
- Purpose: Maps MIDI Control Change values to the 8 Control Change
- inputs of the corresponding Control Output module.
-
- Default Control Change numbers, with Yamaha's names:
-
- V = 7 = Volume
- M = 1 = Modulation Wheel
- A = 2 = Breath Controller
- B = 3 = Unspecified
- C = 4 = Foot Controller
- D = 5 = Portamento Time
- 1 = 64 = Sustain Foot Switch
- 2 = 65 = Portamento Foot Switch
-
- ----------------------------------------------------------------------
- PC Beep SYSTEM 2,3 \0F
-
- Purpose: Sound a tone on the PC speaker.
-
- Clock (heart) input: Any non-zero after zero will sound the tone set
- by the Value input, zero will turn it off.
-
- Value "-->" input: Any value may be sent, but pitch changes are
- meaningful only from about 20 hex to 60 hex.
-
-
- ----------------------------------------------------------------------
- Console Input SYSTEM 3,1 \FB
-
- Purpose: Allow access to console input. This is normally the
- computer keyboard, but it may be a serial port or a file, if input
- is redirected when MusicBox was first loaded. See DOS manual for
- further information on redirected i/o.
-
- Output: Most recent console character. Bit 7 of the output goes high
- for one cycle whenever a new character is input.
-
- Hold (check) input: When non-zero, input will not be read.
-
-
-
-
-
-
- 77
-
-
-
- ----------------------------------------------------------------------
- MIDI Data Input SYSTEM 3,2 \1A
-
- Purpose: Allow access to incomming MIDI data stream. The data
- stream is buffered in the s-sequencer memory area, and is accessed
- through those modules. This module enables and disables the data
- flow, and indexes the incoming MIDI events.
-
- Output: Address (in the F hex run of the "B" sequencer memory area)
- of the most recent incomming MIDI data. Increments on each
- incomming MIDI data byte.
-
- Reset strobe "!" input: Resets the write address to 0.
-
- Enable (omega) input: When non-zero, the module will write incomming
- MIDI data to the sequencer memory addressed by the output index.
- When zero, the index will continue to increment with incoming
- data, but the module will not write to the sequencer memory.
-
- ----------------------------------------------------------------------
- Incoming Data Stream Select SYSTEM 3,2 \AB
-
- Purpose: Inhibit/pass incomming MIDI data from either or both of the
- MPU's. Also displays active incoming stream.
-
- Output: Most recently active incomming data stream. Bit 0 is MPU-1,
- bit 1 is MPU-2
-
- Hold (check) input: Non-zero inhibits resetting of the output flags,
- causing the output to remain unchanged unless incoming data is
- from a different MPU. If zero, the output will strobe with each
- new incoming data packet.
-
- Mask "&" input: Bits 0 and 1 pass incoming data from MPU1 and MPU2
- respectively when set, and inhibit it when clear. Default is 3,
- accept data from both MPU's.
-
- ----------------------------------------------------------------------
- MIDI Output Buffer Status SYSTEM 3,3 \F9
-
- Purpose: Show MIDI output activity.
-
- Output: TRUE when MIDI output buffer is not empty. Effect is to
- flash when there is outgoing MIDI data.
-
- [end]
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 78
-
-
-
-
-
-
-
-
-
-
-
-
-